【发布时间】:2017-04-25 19:44:48
【问题描述】:
我正在尝试使用 SQL Server 将 case 语句添加到我的查询中。我有一个很长的查询,我基本上选择了一个临时表#Step1,给出了下表。
+---+------------+-------------+-----------------+---------------+
| | 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 |
+---+------------+-------------+---------------- +---------------+
我的疑问是,查看上表,我想选择一个案例语句,如果 AOP 和锅炉的“TechPrem”为“是”,那么我的查询 1 应该执行,否则如果“TechPrem”为“ No' 对于 AOP & Boiler,则应执行查询 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
【问题讨论】:
-
那些 ROW_NUMBER 函数将无法正常工作,因为那里有字符串文字。取出引号。在继续使用 NOLOCK 乱扔查询之前,您还应该看看这篇文章。 blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere至于手头的问题……我根本不明白你想要什么。而且您的预期输出甚至与样本中的数据不匹配。
-
我不清楚问题
-
@Paparazzi 也不是我。这个问题太牛了!
标签: sql sql-server tsql