我想从前三列获得不同的列值,第四列包含三态值i,e。 1,0,Null和第四列值应按上述顺序进行。
例如,如果我的表格数据是
前三列分组,第四列值优先
任何帮助将不胜感激
答案 0 :(得分:2)
您需要使用MAX
GroupBY
子句。
SELECT
Proj,
sponser,
Id,
Max(visible) AS MaxVisible
FROM
tableName
GROUP BY
Proj,Sponser,Id
答案 1 :(得分:1)
试试这个,
SELECT Proj,
Sponsor,
ID,
Visible
FROM (SELECT Proj,
Sponsor,
ID,
Visible,
Row_Number()
OVER(
Partition BY PRoj, Sponsor, ID
ORDER BY Visible DESC) AS RN
FROM #Yourtable)A
WHERE RN = 1
答案 2 :(得分:1)
获得预期结果的多种方法,已发布的答案是正确的。我只想显示使用CTE来获得相同的结果。
基于您的示例
请查看以下查询以获取所需的输出。是的CTE将比嵌套查询的成本更低。
CREATE TABLE project (proj VARCHAR(5), Sponsor VARCHAR(5), ID INT, visible INT null)
INSERT INTO project
SELECT 'A', 'a', 123, NULL
UNION
SELECT 'A', 'a', 123, 1
UNION
SELECT 'A', 'a', 123, 0
UNION
SELECT 'B', 'b', 345, NULL
UNION
SELECT 'B', 'b', 345, 1
UNION
SELECT 'B', 'b', 345, 0
UNION
SELECT 'C', 'c', 567, 0
UNION
SELECT 'D', 'd', 897, 0
UNION
SELECT 'D', 'd', 897, 1
UNION
SELECT 'E', 'e', 765, NULL
;WITH CTE AS
(
SELECT proj, Sponsor,ID,visible, ROW_NUMBER() OVER (PARTITION BY proj ORDER BY visible DESC) AS Rank
FROM project
)
SELECT proj, Sponsor,ID,visible
FROM CTE
WHERE Rank = 1