这是我的第一张table:
这是我的第二张table:
我想创造一个 INSERT
查询,以便第一个表中结果为“y”的任何列都将插入到第二个表中,但case语句插入除“y”以外的其他值时遇到了问题。
因此,在第一个表中,如果一条记录的slp\u c、sw\u c和其他\u c的值为“y”,那么在插入后的第二个表中,discipline1\u c='slp',discipline2='sw',discipline3\u c='oth'。如何编写case语句以使值正确插入到第二个表中?
INSERT INTO [dbo].[tb_cdsa_eligibility] ([uniqueid_c], [Discipline1_c],[Discipline2_c], [Discipline3_c])
SELECT
[uniqueid_c],
-- this one is going into Discipline1
CASE
WHEN [slp_c] = 'Y' THEN 'SLP'
WHEN [ot_c] = 'Y' THEN 'OT'
WHEN [SpecEd_c] = 'Y' THEN 'SE'
WHEN [medical_c] = 'Y' THEN 'MED'
WHEN [pt_c] = 'Y' THEN 'PT'
WHEN [sw_c] = 'Y' THEN 'SW'
WHEN [psych_c] = 'Y' THEN 'PSY'
WHEN [other_c] = 'Y' THEN 'OTH'
ELSE NULL
END,
-- this one is going into Discipline2
CASE
WHEN [slp_c] = 'Y' THEN 'SLP'
WHEN [ot_c] = 'Y' THEN 'OT'
WHEN [SpecEd_c] = 'Y' THEN 'SE'
WHEN [medical_c] = 'Y' THEN 'MED'
WHEN [pt_c] = 'Y' THEN 'PT'
WHEN [sw_c] = 'Y' THEN 'SW'
WHEN [psych_c] = 'Y' THEN 'PSY'
WHEN [other_c] = 'Y' THEN 'OTH'
ELSE NULL
END,
-- this one is going into Discipline3
CASE
WHEN [slp_c] = 'Y' THEN 'SLP'
WHEN [ot_c] = 'Y' THEN 'OT'
WHEN [SpecEd_c] = 'Y' THEN 'SE'
WHEN [medical_c] = 'Y' THEN 'MED'
WHEN [pt_c] = 'Y' THEN 'PT'
WHEN [sw_c] = 'Y' THEN 'SW'
WHEN [psych_c] = 'Y' THEN 'PSY'
WHEN [other_c] = 'Y' THEN 'OTH'
ELSE NULL
END
FROM
[cd].[tb_cdsa_eligibility]
2条答案
按热度按时间oipij1gg1#
您需要将列转换为行,然后再转换回列。这似乎是一个很好的例子
PIVOT
```SELECT
uniqueid_c,
[1] AS Discipline1_c,
[2] AS Discipline2_c,
[3] AS Discipline3_c
FROM @tb_cdsa_eligibility
OUTER APPLY (
) AS pivotedDisciplines
ORDER BY uniqueid_c;
omvjsjqw2#
下面是我在xml中使用的技巧。不一定很漂亮,但对我很管用。
在ssms中可以运行以下操作:
预览返回
ssms(续)
退货
可以将前三个规程的结果插入表中,也可以像普通查询一样直接返回结果。
注意使用
data(//values/val)[n]
. 值n引用规程列表中的特定索引。如果n索引不存在,则返回null。您还可以通过添加另一个“discipline[#]c”列并增加n的值来增加返回的规程数。您可以通过更改
CASE
内部秩序OUTER APPLY
. 在我的示例中,我默认为您的列顺序。