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)'可以根据样本数据进行调整。 –