表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 
或者客户放前面 但不要出现重复行

解决方案 »

  1.   

    select b.id,b.供应商,b.原料,b.数量,b.金额,a.客户, a.产品 ,a.数量, a.金额 from 表1 a,表2 b
      

  2.   

    --> liangCK小梁 于2008-11-06
    --> 生成测试数据: @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 行受影响)
    */
      

  3.   

    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, 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
      

  4.   

    /**数据写错了***/
    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
      

  5.   

    drop table #a
    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 行)