SQL Query从字段中提取数据并返回计数而不是文本,然后使用总计进行分组

问题描述 投票:0回答:1

我有一个名为Billing的双列表,如下所示:

ID                                      Details
E4A02FB2-298B-4790-B01A-DCAE2B3CC0A2    {"Search":"Tint","Subject":"JAY PATEL","SubjectId":"35","SLW":"True","MN":"False","EPP":"False","ApproximateTotalRecords":"0"}
164AD558-E3AF-4FB9-9CCF-3EB8FE7A02FE    {"Search":"Tint","Subject":"Derel Borges","SubjectId":"TL-100317-9A3TG-FS-001","SLW":"True","MN":"True","EPP":"True","ApproximateTotalRecords":"0"}
95133974-A169-4647-B176-E9F3CF1FFE26    {"Search":"Tint","Subject":"KRISTEN KiFL","SubjectId":"25517489","SLW":"True","MN":"False","EPP":"False","ApproximateTotalRecords":"0"}
E4A02FB2-298B-4790-B01A-DCAE2B3CC0A2    {"Search":"Tint","Subject":"ASHLEY HARMN","SubjectId":"35","SLW":"True","MN":"False","EPP":"False","ApproximateTotalRecords":"0"}
E4A02FB2-298B-4790-B01A-DCAE2B3CC0A2    {"Search":"Tint","Subject":"ZACHARY PRIDGEN","SubjectId":"35","SLW":"True","MN":"False","EPP":"False","ApproximateTotalRecords":"0"}
95133974-A169-4647-B176-E9F3CF1FFE26    {"Search":"Tint","Subject":"GODFREY CREELEY","SubjectId":"27235440","SLW":"True","MN":"False","EPP (temp)":"False","ApproximateTotalRecords":"0"}
E4A02FB2-298B-4790-B01A-DCAE2B3CC0A2    {"Search":"Tint","Subject":"FELICIA SMITH","SubjectId":"35","SLW":"True","MN":"False","EPP (temp)":"False","ApproximateTotalRecords":"0"}
E4A02FB2-298B-4790-B01A-DCAE2B3CC0A2    {"Search":"Tint","Subject":"KIANA JOHN","SubjectId":"35","ApproximateTotalRecords":"0"}
E4A02FB2-298B-4790-B01A-DCAE2B3CC0A2    {"Search":"Tint","Subject":"HU LI","SubjectId":"35","SLW":"True","MN":"False","EPP (temp)":"False","ApproximateTotalRecords":"0"}
95133974-A169-4647-B176-E9F3CF1FFE26    {"Search":"Tint","Subject":"PAT REID","SubjectId":"26134607","SLW":"True","MN":"False","EPP (temp)":"False","ApproximateTotalRecords":"0"}
E4A02FB2-298B-4790-B01A-DCAE2B3CC0A2    {"Search":"Tint","Subject":"JOHN RODRIGUEZ","SubjectId":"35","SLW":"True","MN":"False","EPP":"False","ApproximateTotalRecords":"0"}
95133974-A169-4647-B176-E9F3CF1FFE26    {"Search":"Tint","Subject":"FAWN JOSEY","SubjectId":"27108394","SLW":"True","MN":"False","EPP (temp)":"False","ApproximateTotalRecords":"0"}
E4A02FB2-298B-4790-B01A-DCAE2B3CC0A2    {"Search":"Tint","Subject":"OSCAR DELL","SubjectId":"35","SLW":"True","MN":"False","EPP (temp)":"False","ApproximateTotalRecords":"3"}
E4A02FB2-298B-4790-B01A-DCAE2B3CC0A2    {"Search":"Tint","Subject":"SARAH SMITH","SubjectId":"35","SLW":"True","MN":"False","EPP":"False","ApproximateTotalRecords":"0"}
164AD558-E3AF-4FB9-9CCF-3EB8FE7A02FE    {"Search":"Tint","Subject":"KELLER SMITH","SubjectId":"35","SLW":"True","MN":"False","EPP":"False","ApproximateTotalRecords":"0"}

我需要做的是编写一个查询,从每个记录中提取True SLW,MN,EPP和EPP(temp)的数量,然后按ID返回它们作为计数。

因此,为了便于理解,让我通过两个步骤展示所需的结果:

查询首先需要完成此操作:请原谅图像,因为我无法使表格正确排列以便阅读:enter image description here

请注意,并非所有4个代码都存在于每条记录中。如果代码不存在,我仍然希望它返回为该行的零。

在此之后,我想要ID的总数 - 所以这个查询的最终结果将如下所示:

ID                                      SLW MN  EPP EPP (temp)
E4A02FB2-298B-4790-B01A-DCAE2B3CC0A2    8   0   0   0
164AD558-E3AF-4FB9-9CCF-3EB8FE7A02FE    2   1   1   0
95133974-A169-4647-B176-E9F3CF1FFE26    4   0   0   0

这对于我的SQL查询体验水平来说是非常先进的,所以希望这里有人可以帮助指导我朝着正确的方向前进?

非常感谢。

sql tsql
1个回答
1
投票

这样的事情应该这样做:

SELECT
    ID
    , SUM(CASE WHEN Details LIKE '%"SLW":"True"%' THEN 1 ELSE 0 END) SLW
    , SUM(CASE WHEN Details LIKE '%"MN":"True"%' THEN 1 ELSE 0 END) MN
    , SUM(CASE WHEN Details LIKE '%"EPP":"True"%' THEN 1 ELSE 0 END) EPP
    , SUM(CASE WHEN Details LIKE '%"EPP (temp)":"True"%' THEN 1 ELSE 0 END) [EPP (temp)]
FROM Billing
GROUP BY ID

对于更基本的结果集:

SELECT
    ID
    , CASE WHEN Details LIKE '%"SLW":"True"%' THEN 1 ELSE 0 END SLW
    , CASE WHEN Details LIKE '%"MN":"True"%' THEN 1 ELSE 0 END MN
    , CASE WHEN Details LIKE '%"EPP":"True"%' THEN 1 ELSE 0 END EPP
    , CASE WHEN Details LIKE '%"EPP (temp)":"True"%' THEN 1 ELSE 0 END [EPP (temp)]
FROM Billing
© www.soinside.com 2019 - 2024. All rights reserved.