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