我有以下声明:
SELECT
(CONVERT(VARCHAR(10), f1, 120)) AS ff1,
CONVERT(VARCHAR(10), f2, 103) AS ff2,
...,
Bonus,
Malus,
ClientID,
FROM
my_table
WHERE
<my_conditions>
ORDER BY
f1 ASC
此选择为每个 ClientID 返回几行。我必须过滤掉所有没有非空 Bonus 或 Malus 行的客户行。
我怎样才能通过仅通过一个语句更改此选择而不复制所有这些选择来做到这一点?
我可以将结果存储在#temp_table 中,然后对数据进行分组并使用分组结果来过滤临时表。-但我应该只用一个语句来做。
我可以执行此选择两次 - 一次对其进行分组,然后我可以根据分组结果过滤行。但我不想选择它两次。
可能是 CTE(通用表表达式)在此处仅用于执行一次选择并能够使用结果进行分组,然后根据分组结果选择所需的结果。
这个问题有更优雅的解决方案吗?
先感谢您!
只是为了澄清 SQL 应该做什么,我添加了一个示例:
ClientID Bonus Malus
1 1
1
1 1
2
2
3 4
3 5
3 1
所以在这种情况下,我不希望出现 ClientID=2 行(它们并不有趣)。结果应该是:
ClientID Bonus Malus
1 1
1
1 1
3 4
3 5
3 1