我有一张如下表格
CREATE TABLE #T(Name varchar(10),Online BIT, Offline BIT,F_Id INT)
INSERT INTO #T
VALUES('A',1,0,0),('A',0,1,100),('A',1,0,200),('B',0,1,100),('B',1,0,140), ('C',1,0,0)
我想要的是使用Name和F_Id的组合生成唯一行,但F_Id为零时除外。
基本上我所追求的输出是
A 1 1 100 --> Merging ('A',1,0,0),('A',0,1,100)
A 1 0 200
B 0 1 100
B 1 0 140
C 1 0 0
从下面开始
SELECT Name,MAX(CONVERT(INT,Online)),MAX(CONVERT(INT,Offline)),MAX(F_Id) F_Id
FROM #T
GROUP BY Name
答案 0 :(得分:0)
如果我没有遗漏任何东西,你只是错过了一个where子句,这也保留了A|1|0|200
行
SELECT Name,
MAX(CONVERT(INT,Online)),
MAX(CONVERT(INT,Offline)),
MAX(F_Id) F_Id
FROM #T
where f_id<>0
GROUP BY Name,F_Id
答案 1 :(得分:0)
您需要按名称n fid进行分组才能获得唯一的结果
SELECT Name,MAX(CONVERT(INT,Online)),MAX(CONVERT(INT,Offline)), F_Id
FROM #T where f_id<>0
GROUP BY Name,f_id
答案 2 :(得分:0)
您应该确保只选择不同的Name和F_Id对。
CREATE TABLE #T(Name varchar(10),Online BIT, Offline BIT,F_Id INT) INSERT INTO #T VALUES('A',1,0,0),('A',0,1,100),('A',1,0,200),('B',0,1,100),('B',1,0,140),('C',1,0,0) GO
6 rows affected
SELECT #T.Name, CONVERT(INT,#T.Online) OnLine, CONVERT(INT,#T.Offline) OffLine, #T.F_Id FROM #T INNER JOIN (SELECT Name, COUNT(*) AS Num FROM #T GROUP BY Name) U ON U.Name = #T.Name WHERE #T.F_id <> 0 OR U.Num = 1; GO
Name | OnLine | OffLine | F_Id :--- | -----: | ------: | ---: A | 0 | 1 | 100 A | 1 | 0 | 200 B | 0 | 1 | 100 B | 1 | 0 | 140 C | 1 | 0 | 0
dbfiddle here