2017-04-25 109 views
1

我正在尝试使用SQL Server将查询语句添加到我的查询中。我有一个非常长的查询,我已经基本选择到一个临时表#Step1给出下表。在SQL Server中选择Case语句

+---+------------+-------------+-----------------+---------------+ 
| |  LOB | TechPrem | Label   | Data   | 
+---+------------+-------------+-----------------+---------------+ 
| 1 | AOP  | Yes   | ADjAAL   | 40331  | 
| 1 | Boiler  | Yes   | AdjAAL   |  0   | 
| 1 | TRIA  | NO   | AdjAAL   |  0   | 
| 1 | AOP  | Yes   | PureAAL  | 11904  | 
| 1 | Boiler  | Yes   | PureAAL  |  775  | 
+---+------------+-------------+---------------- +---------------+ 

我怀疑这里,看着上面的表格,我想选择一个case语句,其中如果“TechPrem”是“是”为AOP &锅炉,那么我的查询1应该执行,否则,如果' TechPrem“为AOP &锅炉为”否“,则应执行查询2。在这个任何建议或想法将是有益的

查询1:

SELECT 
    FileID, 
    SUM(CAST(REPLACE(Data,',','.') AS FLOAT)) AS Summed_AAL_Attri 
FROM 
    (SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY FileID, "LOB" ORDER BY "Label" ASC) AS rn 
    FROM 
     DATA WITH (NOLOCK) 
    WHERE 
     Label IN ('AdjAAL') 
     AND LOB IN ('AOP', 'Boiler', 'TRIA')) AS t 
WHERE 
    t.rn = 1 
    AND FileID = 1 
GROUP BY 
    FileID 

预期的答案,如果 '是':403301

查询2:

SELECT 
    FileID, 
    SUM(CAST(REPLACE(Data,',','.') AS FLOAT)) AS Summed_AAL_Attri 
FROM 
    (SELECT 
     *, 
     row_number() over (partition by FileID, "LOB" ORDER BY "Label" ASC) as rn 
    FROM 
     DATA WITH (NOLOCK) 
    WHERE 
     Label IN ('AdjAAL','PureAAL') 
     AND LOB IN ('AOP', 'Boiler', 'TRIA')) AS t 
WHERE 
    t.rn = 1 
    AND FileID = 1 
GROUP BY 
    FileID 

预期的答案,如果“否':41106

+0

这些ROW_NUMBER函数不会正常工作,因为您在那里有字符串文字。拿出报价。在继续使用NOLOCK丢掉查询之前,您还应该阅读本文。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/至于手头的问题......我不明白你想要什么。而且您的预期输出甚至不匹配您样本中的数据。 –

+1

问题不清楚 – Paparazzi

+0

@Paparazzi也不是我。这个问题是疯狂的! – Caltor

回答

1

根据案例运行不同的查询不是SQL Server支持,但是因为我只在子查询的WHERE子句中看到这些查询中的一个区别,所以可以在那里使用case语句。

SELECT 
    FileID, 
    SUM(CAST(REPLACE(Data,',','.') AS FLOAT)) AS Summed_AAL_Attri 
FROM 
    (SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY FileID, "LOB" ORDER BY "Label" ASC) AS rn 
    FROM 
     DATA WITH (NOLOCK) 
    WHERE 
     Label IN ('AdjAAL', CASE TechPrem 
      WHEN 'YES' THEN '' 
      WHEN 'NO' THEN 'PureAAL' 
      END) 
     AND LOB IN ('AOP', 'Boiler', 'TRIA')) AS t 
WHERE 
    t.rn = 1 
    AND FileID = 1 
GROUP BY 
    FileID