sql server查询以显示数据
我的数据如下:sql server查询以显示数据,sql,sql-server-2008,Sql,Sql Server 2008,我的数据如下: id empid amount billamt 1 101 150.00 150.00 2 102 300.00 700.00 (sum(300+400)) 3 102 400.00 700.00 (should be NULL) --> i want this value to not repeat again,should be NULL 4 104 600.00 600.00 5 105 200.00
id empid amount billamt
1 101 150.00 150.00
2 102 300.00 700.00 (sum(300+400))
3 102 400.00 700.00 (should be NULL)
--> i want this value to not repeat again,should be NULL
4 104 600.00 600.00
5 105 200.00 600.00(sum(200+400))
6 105 400.00 600.00(should be NULL)
--> i want this value to not repeat again,should be NULL
由于empid相同,因此我只想显示一次总和值。使用窗口函数计算每个empid的总金额
你可以这样写:
DECLARE @Emp TABLE (id INT, empid INT, amount DECIMAL(10,2),billamt DECIMAL(10,2))
INSERT INTO @Emp VALUES
(1,101,150.00,150.00),(2,102,300.00,700.00 ),(3,102,400.00,700.00 )
;WITH CTE AS
( SELECT id,empid,amount,billamt
, ROW_NUMBER() OVER( PARTITION BY empid ORDER BY Id ASC) AS Rownum
FROM @Emp)
UPDATE CTE
SET billamt = NULL
WHERE Rownum > 1
SELECT * from @Emp
请发布您尝试过的内容。您想用NULL显示最后一行,还是不想在以后的案例中显示重复的行请参考Jens的答案。您可能想解释一下,这不仅会影响选择结果,还会更新源表本身。
DECLARE @Emp TABLE (id INT, empid INT, amount DECIMAL(10,2),billamt DECIMAL(10,2))
INSERT INTO @Emp VALUES
(1,101,150.00,150.00),(2,102,300.00,700.00 ),(3,102,400.00,700.00 )
;WITH CTE AS
( SELECT id,empid,amount,billamt
, ROW_NUMBER() OVER( PARTITION BY empid ORDER BY Id ASC) AS Rownum
FROM @Emp)
UPDATE CTE
SET billamt = NULL
WHERE Rownum > 1
SELECT * from @Emp