0
我覺得在我看來是一個複雜的SQL要求,我需要查詢數據表以返回具有不同版本的記錄集的完全匹配。SQL(服務器)按多行確切條件篩選行
換言之,我有多個版本,每個版本可以有一個或多個產品|報價組合。如果我通過產品|報價組合,我想返回所有版本只有那些確切的組合(不多也不少)。
最重要的是,我有一些產品|引號重複多次(作爲一個包),所以我需要將它們作爲一個獨立的實體進行分組,並將它們視爲每個版本的一個。
它變得很很複雜,我不確定SQL是否甚至是最好的工具來處理這個問題,或者如果我缺少高級技能來完成任務。
這就是說,這裏是一個樣本數據集(如下所示組織的可視化,請參閱下面的實際數據集可以複製):
預期v實際業績的位置:
SQL在下面(我也有挖掘到EXCEPT
有點認爲可能有幫助,但我失去了我的能力看看這個了):
備註 - HAVING Count(version_num)需要根據產品數量變更爲1,2,3等。引用組合輸入。
SELECT Account_No, version_num, -- LineOfBus, ProductNo, QuoteNo,
SUM(CASE
WHEN ISNUMERIC(TotalPremium) = 1 THEN CONVERT(decimal(16,2),TotalPremium)
END) As TotalPremium
FROM
(SELECT t.Account_No, t.version_num,
CASE
WHEN ISNull(t.PackageIndicator,'0') = '1' THEN 'Package' Else t.Lob
END AS LineOfBus,
t.ProductNo, t.QuoteNo,
ISNull(CASE
WHEN ISNUMERIC(t.TotalPremium) = 1 THEN CONVERT(decimal(16,2),t.TotalPremium)
END, 0) TotalPremium
FROM zzzScottTest as T
WHERE t.version_num IN
(SELECT sqVersionNumber.version_num
FROM
/* this captures unique package product records (or just stand alone records as well) */
(SELECT DISTINCT sqUnique.version_num, Count(sqUnique.version_num) VersionCount
FROM
/* grab list of all uniquer version, product, quote combinations (use distinct to combine package */
(SELECT DISTINCT version_num, productNo, quoteNo
FROM zzzScottTest
WHERE Account_No = 'b' /* pass as parameter */
AND ProductNo IN ('8888') /* pass as parameter */
AND QuoteNo IN ('999') /* pass as parameter */
) AS sqUnique
GROUP BY version_num
HAVING Count(version_num) = 1 /* pass as variable based on number of products, quotes */
) as sqVersionNumber
)
AND t.Account_no = 'b' /* pass as parameter */
AND t.ProductNo IN ('8888') /* pass as parameter */
AND t.QuoteNo IN ('999') /* pass as parameter */) as sqLOB
GROUP BY Account_No, version_num --, LineOfBus, ProductNo, QuoteNo
最後 - 樣本數據集複製:
Account_No Version_Num LOB ProductNo QuoteNo TotalPremium PackageIndicator RowNo
b 1 GL 1234 987 100 1 1
b 1 Auto 1234 987 200 1 2
b 1 WC 7891 321 300 0 3
b 2 GL 2222 222 100 0 1
b 2 Auto 4567 654 200 0 2
b 3 GL 2222 222 100 0 1
b 4 GL 2222 222 110 0 1
b 5 GL 2222 222 115 0 1
b 5 Auto 4567 654 250 0 2
b 6 GL 1234 987 100 1 1
b 6 Auto 1234 987 200 1 2
b 6 WC 7891 321 350 0 3
b 7 WC 7891 321 350 0 1
b 7 Prop 8888 999 400 0 2
b 8 GL 1234 987 111 1 1
b 8 Auto 1234 987 222 1 2
b 9 GL 2222 222 100 0 1
b 9 Auto 4567 654 200 0 2
b 9 WC 9999 888 150 0 3
b 10 GL 2222 222 100 0 1
您的要求並不複雜;我認爲你是在過度查詢。我正在嘗試讀取你的SQL,但是過分嵌套的子選擇很難。此外,它不會幫助您不知道您是否僅有測試用途的所有參數,或者您是否真正在最終形式中使用它們。 – Anand
@Anand - 我同意我是過度的。我感覺就像在我的SQL頭上。請建議更好的子查詢格式。或者可以直接編輯問題。參數將根據數據集以最終形式使用。 'ProductNo','QuoteNo'和'HAVING Count(version_num)'可以根據樣本數據進行調整。 –