有一个主表 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 ...
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 ...
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
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
, 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 行受影响)*/
列名 'DocNum' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'DocNum' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'ItemName' 无效。