如何按Call Type的Answer值拆分含相同ID的数据集至临时表?
问题:按Call Type对应的Answer值拆分数据集到临时表
现有数据集包含Question、Answer、ID三列,其中Question分为三类:Call Type、Date、其他问题;对应的Answer分别为Initial Checking/Second Checking、日期值、其他回答。需要将同一ID下的所有记录,按Call Type对应的Answer值拆分到不同临时表中。
示例数据集
| Question | Answer | ID |
|---|---|---|
| Call Type | Initial Checking | 1234 |
| Date | 1/1/2024 | 1234 |
| 你叫什么名字 | Mike | 1234 |
| 你的住址是哪里 | LA | 1234 |
| Call Type | Second Checking | 4567 |
| Date | 5/1/2024 | 4567 |
| 你的邮编是多少 | 55555 | 4567 |
| 你的城市是哪里 | Miami | 4567 |
| Call Type | Initial Checking | 7891 |
| Date | 4/2/2024 | 7891 |
| 你叫什么名字 | Jenny | 7891 |
目标结果
临时表#INITIAL(对应Initial Checking)
| Question | Answer | ID |
|---|---|---|
| Call Type | Initial Checking | 1234 |
| Date | 1/1/2024 | 1234 |
| 你叫什么名字 | Mike | 1234 |
| 你的住址是哪里 | LA | 1234 |
| Call Type | Initial Checking | 7891 |
| Date | 4/2/2024 | 7891 |
| 你叫什么名字 | Jenny | 7891 |
临时表#SECOND(对应Second Checking)
| Question | Answer | ID |
|---|---|---|
| Call Type | Second Checking | 4567 |
| Date | 5/1/2024 | 4567 |
| 你的邮编是多少 | 55555 | 4567 |
尝试的SQL(无法实现需求)
SELECT R* INTO #INITIAL FROM #Result1 R WHERE R.Answer = 'Initial Checking'
解决方案
核心思路
原SQL仅筛选了Answer='Initial Checking'的行(即Call Type那一行),但我们需要提取同一ID下的所有记录——因为这些记录属于同一个Call Type分组。正确的做法是先找到对应Call Type的所有ID,再关联提取这些ID的全部数据。
实现代码
创建#INITIAL临时表
WITH TargetIDs AS ( -- 先获取所有属于Initial Checking的ID SELECT ID FROM #Result1 WHERE Question = 'Call Type' AND Answer = 'Initial Checking' ) SELECT r.* INTO #INITIAL FROM #Result1 r JOIN TargetIDs t ON r.ID = t.ID;
创建#SECOND临时表
WITH TargetIDs AS ( -- 先获取所有属于Second Checking的ID SELECT ID FROM #Result1 WHERE Question = 'Call Type' AND Answer = 'Second Checking' ) SELECT r.* INTO #SECOND FROM #Result1 r JOIN TargetIDs t ON r.ID = t.ID;
是否需要PARTITION BY?
不需要。PARTITION BY主要用于窗口函数(如排名、分组聚合计算),而当前需求是按ID分组提取完整记录,用CTE+关联查询即可实现,无需窗口函数。
内容的提问来源于stack exchange,提问作者NeverStopLearning
相关产品推荐
相关产品推荐

