Last Name First Name DATE Total-Chrg
Jaime KRiSH 5/1/2015 -4150.66
Jaime KRiSH 5/1/2015 1043.66
Jaime KRiSH 5/1/2015 1043.66
Jaime KRiSH 5/1/2015 4150.66
Jaime KRiSH 5/3/2015 4150.66
Peter Jason 5/1/2015 321.02
Peter Jason 5/1/2015 321.02
Peter Jason 5/23/2015 123.02
我希望结果符合以下方式
Uniq ID Last Name First Name DATE Total-Chrg
1 Jaime KRiSH 5/1/2015 -4150.66
2 Jaime KRiSH 5/1/2015 1043.66
2 Jaime KRiSH 5/1/2015 1043.66
3 Jaime KRiSH 5/1/2015 4150.66
4 Jaime KRiSH 5/3/2015 4150.66
5 Peter Jason 5/1/2015 321.02
5 Peter Jason 5/1/2015 321.02
7 Peter Jason 5/23/2015 123.02
我基本上需要创建一个唯一密钥,因为该表没有任何唯一ID。
答案 0 :(得分:0)
您可以使用row_number()
分配一个:
select t.*, dense_rank() over (order by lastname, firstname, date, totalchrg)
from table t;
您可以添加标识值:
alter table add column uniqueId identity(1, 1);
但是,您无法控制哪些行获取哪些值。
答案 1 :(得分:0)
这是一个有效的例子,
请注意,你的答案中有一个错误,7应该是6 !!!
你基本上必须制作一个不同项目的表格。如果此表具有自动ID,则SQL将为您创建密钥。然后,您可以重新加入数据并使用新密钥。
您可以通过在LastName,FirstName,Date和Total(在临时表上)放置索引来加快速度
DECLARE @Data TABLE(LastName NVARCHAR(32),FirstName NVARCHAR(32),Date DATE,Total DECIMAL(18,4))
INSERT INTO @Data
VALUES
('Jaime','KRiSH','5/1/2015',-4150.66),
('Jaime','KRiSH','5/1/2015', 1043.66),
('Jaime','KRiSH','5/1/2015', 1043.66),
('Jaime','KRiSH','5/1/2015', 4150.66),
('Jaime','KRiSH','5/3/2015', 4150.66),
('Peter','Jason','5/1/2015', 321.02),
('Peter','Jason','5/1/2015', 321.02),
('Peter','Jason','5/23/2015',123.02)
CREATE TABLE #Temp (ID INT IDENTITY(1,1),FirstName NVARCHAR(32),LastName NVARCHAR(32),Date DATE,Total DECIMAL(18,4))
INSERT INTO #Temp (LastName,FirstName,Date,Total)
SELECT LastName,
FirstName,
Date,
Total
FROM @Data
GROUP BY FirstName,LastName,Date,Total
SELECT T.ID,D.LastName,D.FirstName,D.Date,D.Total
FROM @Data AS D
INNER JOIN #Temp AS T ON T.LastName = D.LastName AND T.FirstName = D.FirstName AND T.Date = D.Date AND T.Total = D.Total
DROP TABLE #Temp