我觉得在我看来是一个复杂的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