有一个主表 SellMaster(DocNum,CardCode,CardName,DocTotal),一个从表SellDetails(DocNum,ItemCode,ItemName,Price,Quantity,LineTotal),我的SQL语句如下:SELECT a.DocNum,a.CardCode,a.CardName,b.ItemCode,b.ItemName,b.Price,b.Quantity,a.DocTotal 
FROM SellMaster a JOIN SellDetails b ON a.DocNum=b.DocNum  结果如下:DocNum CardCode CardName ItemCode ItemName Price Quantity DocTotal
220001  K001    张三       0101001  彩电      2000    1       5000
220001  K001    张三       0101002  空调      3000    1       5000
220002  K002    李四       0101003  电脑      3500    1       6500     
220002  K002    李四       0101004  冰箱      2500    1       6500
220002  K002    李四       0101005  电磁炉     500    1       6500
220003 ...我想查询结果是:假如相同销售单号的,单据总额只显示一个,即结果如下,请问SQL怎么写:
DocNum CardCode CardName ItemCode ItemName Price Quantity DocTotal
220001  K001    张三       0101001  彩电      2000    1       5000
220001  K001    张三       0101002  空调      3000    1       
220002  K002    李四       0101003  电脑      3500    1       6500     
220002  K002    李四       0101004  冰箱      2500    1       
220002  K002    李四       0101005  电磁炉     500    1       
220003 ...

解决方案 »

  1.   

    SELECT a.DocNum,a.CardCode,a.CardName,b.ItemCode,b.ItemName,b.Price,b.Quantity,a.DocTotal
    INTO #T
    FROM SellMaster a JOIN SellDetails b ON a.DocNum=b.DocNum;SELECT
        DocNum,CardCode,CardName,ItemCode,ItemName,Price,Quantity,
        DocTotal=CASE WHEN ItemCode=(SELECT MIN(ItemCode) 
                                     FROM #T
                                     WHERE DocNum=A.DocNum)
                        THEN RTRIM(DocTotal)
                      ELSE '' END
    FROM #T AS A
      

  2.   

    SELECT a.DocNum,a.CardCode,a.CardName,b.ItemCode,b.ItemName,b.Price,b.Quantity,
        DocTotal=CASE WHEN B.ItemCode=(SELECT MIN(ItemCode)
                                       FROM (
                                           SELECT a.DocNum,b.ItemCode
                                           FROM SellMaster a 
                                              JOIN SellDetails b 
                                                 ON a.DocNum=b.DocNum
                                       ) AS C
                                       WHERE A.DocNum=C.DocNum)
                          THEN RTRIM(DocTotal)
                      ELSE '' END
    FROM SellMaster a JOIN SellDetails b ON a.DocNum=b.DocNum
    ORDER BY DocNum,ItemCode
      

  3.   

    DECLARE @T TABLE(DocNum INT, CardCode VARCHAR(10), CardName NVARCHAR(10)
    , ItemCode INT, ItemName NVARCHAR(10), Price INT, Quantity VARCHAR(10), DocTotal INT) 
    INSERT @T SELECT 220001  ,'K001',    N'张三'    ,  '0101001',  N'彩电'      ,2000,    1    ,  5000 
    INSERT @T SELECT 220001  ,'K001' ,   N'张三'   ,   '0101002' , N'空调'     , 3000 ,   1   ,   5000 
    INSERT @T SELECT 220002  ,'K002'  ,  N'李四'  ,    '0101003'  ,N'电脑'    ,  3500  ,  1  ,    6500    
    INSERT @T SELECT 220002 , 'K002'   , N'李四' ,     '0101004'  ,N'冰箱'   ,   2500   , 1 ,     6500 
    INSERT @T SELECT 220002,  'K002'    ,N'李四',      '0101005'  ,N'电磁炉',    500    , 1 ,     6500 
    SELECT DocNum,CardCode,CardName,ItemCode,ItemName,Price,Quantity,
    CASE WHEN NOT EXISTS(SELECT 1 FROM @T WHERE DocNum =T.DocNum  AND ItemCode<T.ItemCode) 
         THEN DocTotal ELSE NULL END 
    FROM @T T
    /*DocNum      CardCode   CardName   ItemCode    ItemName   Price       Quantity   
    ----------- ---------- ---------- ----------- ---------- ----------- ---------- -----------
    220001      K001       张三         101001      彩电         2000        1          5000
    220001      K001       张三         101002      空调         3000        1          NULL
    220002      K002       李四         101003      电脑         3500        1          6500
    220002      K002       李四         101004      冰箱         2500        1          NULL
    220002      K002       李四         101005      电磁炉        500         1          NULL(5 行受影响)*/
      

  4.   

    LiangCk,执行2楼的语句,在查询分析器里出错服务器: 消息 207,级别 16,状态 3,行 1
    列名 'DocNum' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'DocNum' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'ItemName' 无效。
      

  5.   

    LingCK,你的程序通过了,但是金额显示的是6位小数,怎样令它是整数?另外这些SQL语句我是放在Delphi里的查询分析器里,如果查询SellMaster.DocTotal,是可以统计这一列的,而你这一列,不能做统计。
      

  6.   

    忘记了说,数据库里DocToatl的数据类型是 numeric(19,6)