【发布时间】:2015-03-12 14:03:05
【问题描述】:
我想从前三列中获取不同的列值,第四列包含三态值,即1,0,Null,第四列的值按上述顺序取。
例如,如果我的表格数据是这样的
前三列被分组,第四列值被优先考虑
任何帮助将不胜感激
【问题讨论】:
标签: sql-server
我想从前三列中获取不同的列值,第四列包含三态值,即1,0,Null,第四列的值按上述顺序取。
例如,如果我的表格数据是这样的
前三列被分组,第四列值被优先考虑
任何帮助将不胜感激
【问题讨论】:
标签: sql-server
您需要将MAX 与GroupBY 子句一起使用。
SELECT
Proj,
sponser,
Id,
Max(visible) AS MaxVisible
FROM
tableName
GROUP BY
Proj,Sponser,Id
【讨论】:
试试这个,
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
【讨论】:
获得预期结果的多种方法,已经发布的答案是正确的。我只是想显示使用 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
【讨论】: