从前三列获取不同的列值,并优先使用第四列值SQL

时间:2015-03-12 05:18:09

标签: sql-server

我想从前三列获得不同的列值,第四列包含三态值i,e。 1,0,Null和第四列值应按上述顺序进行。

例如,如果我的表格数据是

Initial Data

Desired Output

前三列分组,第四列值优先

任何帮助将不胜感激

3 个答案:

答案 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