我有以下聲明:過濾行只
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
這個select返回幾行對每個客戶端ID。我必須過濾掉所有沒有非空Bonus或Malus的行的客戶。
我怎樣才能做到這一點通過改變這個選擇由一個語句只和沒有複製所有這些選擇?
我可以將結果存儲在#temp_table中,然後對數據進行分組並使用分組的結果來過濾臨時表。 - 但我應該只用一個陳述來做。
我可以執行此選擇兩次 - 一次分組,然後我可以根據分組結果過濾行。 但我不想選兩次。
可能CTE(公共表表達式)可能僅執行選擇一次在這裏有用和能夠使用結果進行分組,然後選擇基礎上的分類結果期望的結果。
這個問題的更優雅的解決方案?
預先感謝您!
只是爲了澄清的SQL應該怎麼做我補充一個例子:
ClientID Bonus Malus
1 1
1
1 1
2
2
3 4
3 5
3 1
因此,在這種情況下,我不希望客戶端ID = 2行出現(他們不感興趣)。結果應該是:
ClientID Bonus Malus
1 1
1
1 1
3 4
3 5
3 1
*我不得不過濾掉所有與客戶端的行沒有與非空的獎金或蘋果的任何行。*你可以換一種說法你想要什麼,而不是要你不想要?我從這句話中得到了令人頭痛的問題:) –
對不起:)。我將添加一個示例來更好地解釋它 – Alexander
完成。問題中有一個例子。請讓我知道是否需要更多的說明。 – Alexander