表1
ID 客户 产品 数量 单价 金额 备注
1 A 电脑 100 2000 200000 台式电脑
2 Z 笔记本 200 5000 1000000 笔记本
表2
ID 供应商 原料 数量 单价 金额 备注
1 B 内存 100 120 12000 512M
1 C 硬盘 100 300 30000 80G
1 D 主板 100 250 25000 7彩虹
2 B 内存 200 130 26000 1G
2 C 硬盘 200 350 70000 80G
现在我要表3
ID 供应商 原材料 数量 金额 客户 产品 数量 金额
1 B 内存 100 12000 A 电脑 100 200000
1 C 硬盘 100 30000
1 D 主板 100 25000
2 B 内存 200 26000 Z 笔记本 200 1000000
2 C 硬盘 200 70000
或者客户放前面 但不要出现重复行
ID 客户 产品 数量 单价 金额 备注
1 A 电脑 100 2000 200000 台式电脑
2 Z 笔记本 200 5000 1000000 笔记本
表2
ID 供应商 原料 数量 单价 金额 备注
1 B 内存 100 120 12000 512M
1 C 硬盘 100 300 30000 80G
1 D 主板 100 250 25000 7彩虹
2 B 内存 200 130 26000 1G
2 C 硬盘 200 350 70000 80G
现在我要表3
ID 供应商 原材料 数量 金额 客户 产品 数量 金额
1 B 内存 100 12000 A 电脑 100 200000
1 C 硬盘 100 30000
1 D 主板 100 25000
2 B 内存 200 26000 Z 笔记本 200 1000000
2 C 硬盘 200 70000
或者客户放前面 但不要出现重复行
--> 生成测试数据: @T1
DECLARE @T1 TABLE (ID INT,客户 VARCHAR(1),产品 VARCHAR(6),数量 INT,单价 INT,金额 INT,备注 VARCHAR(8))
INSERT INTO @T1
SELECT 1,'A','电脑',100,2000,200000,'台式电脑' UNION ALL
SELECT 2,'Z','笔记本',200,5000,1000000,'笔记本'
--> 生成测试数据: @T2
DECLARE @T2 TABLE (ID INT,供应商 VARCHAR(1),原料 VARCHAR(4),数量 INT,单价 INT,金额 INT,备注 VARCHAR(5))
INSERT INTO @T2
SELECT 1,'B','内存',100,120,12000,'512M' UNION ALL
SELECT 1,'C','硬盘',100,300,30000,'80G' UNION ALL
SELECT 1,'D','主板',100,250,25000,'7彩虹' UNION ALL
SELECT 2,'B','内存',200,130,26000,'1G' UNION ALL
SELECT 2,'C','硬盘',200,350,70000,'80G'--SQL查询如下:SELECT a.ID,
a.供应商,
a.原料,
a.数量,
a.单价,
a.金额,
a.备注,
CASE WHEN a.RID=MIN(a.RID)
OVER(PARTITION BY a.ID)
THEN 客户
ELSE '' END AS 客户,
CASE WHEN a.RID=MIN(a.RID)
OVER(PARTITION BY a.ID)
THEN 产品
ELSE '' END AS 产品,
CASE WHEN a.RID=MIN(a.RID)
OVER(PARTITION BY a.ID)
THEN rtrim(b.数量)
ELSE '' END AS 数量,
CASE WHEN a.RID=MIN(a.RID)
OVER(PARTITION BY a.ID)
THEN RTRIM(b.金额)
ELSE '' END AS 金额
FROM
(
SELECT RID=ROW_NUMBER()
OVER(PARTITION BY ID
ORDER BY ID),
*
FROM @T2
) AS a
JOIN @T1 AS b
ON a.ID=b.ID/*
ID 供应商 原料 数量 单价 金额 备注 客户 产品 数量 金额
----------- ---- ---- ----------- ----------- ----------- ----- ---- ------ ------------ ------------
1 B 内存 100 120 12000 512M A 电脑 100 200000
1 C 硬盘 100 300 30000 80G
1 D 主板 100 250 25000 7彩虹
2 B 内存 200 130 26000 1G Z 笔记本 200 1000000
2 C 硬盘 200 350 70000 80G (5 行受影响)
*/
INSERT INTO #A SELECT 1, 'A', '电脑', 100 ,2000, 200000, '台式电脑 '
INSERT INTO #A SELECT 2, 'Z', '电脑', 200 ,5000, 1000000, '台式电脑 '
CREATE TABLE #B (ID INT,GYS VARCHAR(10),YL VARCHAR(10),S_QTY INT ,PRICE INT ,S_AMT INT,BIGO VARCHAR(50))INSERT INTO #B SELECT 1,'B', '内存', 100, 120, 12000 ,'512M'
INSERT INTO #B SELECT 1,'C', '硬盘', 100, 120, 12000 ,'80G'
INSERT INTO #B SELECT 1,'D', '主板', 100, 120, 12000 ,'7彩虹'
INSERT INTO #B SELECT 2,'B', '内存', 100, 120, 12000 ,'1G'
INSERT INTO #B SELECT 2,'C', '硬盘', 100, 120, 12000 ,'80G' SELECT IDENTITY(INT,1,1)SORT,B.*,A.KH,A.CP,A.QTY,A.AMT INTO #C FROM #B B LEFT JOIN #A A ON A.ID=B.IDSELECT A.ID,A.GYS,A.YL,A.S_QTY,A.S_AMT,B.KH,B.CP,B.QTY,B.AMT FROM #C A
LEFT JOIN
(SELECT * FROM #C C WHERE (SELECT COUNT(*) FROM #C WHERE ID=C.ID AND SORT<C.SORT)<1)B ON (A.ID=B.ID AND A.SORT=B.SORT)DROP TABLE #A,#B,#C
CREATE TABLE #A(ID INT,KH VARCHAR(10),CP VARCHAR(10),QTY INT, PRICE INT,AMT INT,BIGO VARCHAR(50))
INSERT INTO #A SELECT 1, 'A', '电脑', 100 ,2000, 200000, '台式电脑 '
INSERT INTO #A SELECT 2, 'Z', '电脑', 200 ,5000, 1000000, '台式电脑 '
CREATE TABLE #B (ID INT,GYS VARCHAR(10),YL VARCHAR(10),S_QTY INT ,PRICE INT ,S_AMT INT,BIGO VARCHAR(50))INSERT INTO #B SELECT 1,'B', '内存', 100, 120, 12000 ,'512M'
INSERT INTO #B SELECT 1,'C', '硬盘', 100, 300, 30000 ,'80G'
INSERT INTO #B SELECT 1,'D', '主板', 100, 250, 25000 ,'7彩虹'
INSERT INTO #B SELECT 2,'B', '内存', 100, 130, 26000 ,'1G'
INSERT INTO #B SELECT 2,'C', '硬盘', 100, 350, 70000 ,'80G' SELECT IDENTITY(INT,1,1)SORT,B.*,A.KH,A.CP,A.QTY,A.AMT INTO #C FROM #B B LEFT JOIN #A A ON A.ID=B.IDSELECT A.ID,A.GYS,A.YL,A.S_QTY,A.S_AMT,B.KH,B.CP,B.QTY,B.AMT FROM #C A
LEFT JOIN
(SELECT * FROM #C C WHERE (SELECT COUNT(*) FROM #C WHERE ID=C.ID AND SORT<C.SORT)<1)B ON (A.ID=B.ID AND A.SORT=B.SORT)DROP TABLE #A,#B,#C
drop table #b
go
CREATE TABLE #A(ID INT,KH VARCHAR(10),CP VARCHAR(10),QTY INT, PRICE INT,AMT INT,BIGO VARCHAR(50))
INSERT INTO #A SELECT 1, 'A', '电脑', 100 ,2000, 200000, '台式电脑 '
INSERT INTO #A SELECT 2, 'Z', '电脑', 200 ,5000, 1000000, '台式电脑 '
CREATE TABLE #B (ID INT,GYS VARCHAR(10),YL VARCHAR(10),S_QTY INT ,PRICE INT ,S_AMT INT,BIGO VARCHAR(50))INSERT INTO #B SELECT 1,'B', '内存', 100, 120, 12000 ,'512M'
INSERT INTO #B SELECT 1,'C', '硬盘', 100, 300, 30000 ,'80G'
INSERT INTO #B SELECT 1,'D', '主板', 100, 250, 25000 ,'7彩虹'
INSERT INTO #B SELECT 2,'B', '内存', 100, 130, 26000 ,'1G'
INSERT INTO #B SELECT 2,'C', '硬盘', 100, 350, 70000 ,'80G'
select B.ID,B.GYS,B.YL,B.S_QTY,b.price,A.kh,A.cp,A.qty,A.price
FROM #B b left join #a a on b.id=a.id and b.YL='内存'----------------------(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)ID GYS YL S_QTY price kh cp qty price
----------- ---------- ---------- ----------- ----------- ---------- ---------- ----------- -----------
1 B 内存 100 120 A 电脑 100 2000
1 C 硬盘 100 300 NULL NULL NULL NULL
1 D 主板 100 250 NULL NULL NULL NULL
2 B 内存 100 130 Z 电脑 200 5000
2 C 硬盘 100 350 NULL NULL NULL NULL(所影响的行数为 5 行)