简体   繁体   English

SQL查询从字段中提取数据并返回计数而不是文本,然后与总计分组

[英]SQL Query to extract data from a field and return counts instead of text, then group with totals

I have two-column table called Billing which looks like this: 我有一个名为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"}

What I need to accomplish is to write a query that extracts the number of True SLW, MN, EPP, and EPP (temp) from each record and then returns them as a count, by ID. 我需要完成的是编写一个查询,该查询从每条记录中提取True SLW,MN,EPP和EPP(温度)的数量,然后通过ID将它们作为计数返回。

So for ease of understanding, let me show the desired results in two steps: 因此,为了便于理解,让我分两步显示所需的结果:

The query would first need to accomplish this: Please pardon the image as I was not able to get the table to line up properly for reading purposes: 该查询首先需要完成此操作:请原谅图像,因为我无法正确地对齐表以进行读取: 在此处输入图片说明

Note that not all 4 of the codes exist in every record. 请注意,并非所有4个代码都存在于每个记录中。 If the code doesn't exist, I'd still want it returned as a zero for that row. 如果代码不存在,我仍然希望该行将其返回为零。

And after this, I'd want the total by ID - so the final results of this query would look like this: 然后,我想要按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

This is very advanced for my level of SQL query experience, so hoping someone here can help guide me in the right direction? 对于我的SQL查询经验水平而言,这是非常高级的,因此希望这里的人可以帮助指导正确的方向吗?

Many thanks. 非常感谢。

Something like this should do it: 这样的事情应该做到:

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

And for the more basic result set: 对于更基本的结果集:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM