“滚动”记录一式三份,嵌套的case语句(或循环)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“滚动”记录一式三份,嵌套的case语句(或循环)相关的知识,希望对你有一定的参考价值。
我有一个包含四列的表:ID,OUTPUT,NOTE_TEXT,SOURCE
ID值一式三份,因为我从三个不同的SOURCE中取出了所有的联合(一个联合不起作用,这很糟糕)。有效地使每条记录重复三次。
我需要将这些一式三份的ID值分解为每个ID一个记录。
下面是每个ID三次重复的NOTE_TEXT值的四种数据变体的屏幕截图:
以下是来自以下查询的示例输出:
从ID = 00793可以看出,以下案例陈述不起作用。这是为什么?同样,它可以修改为可以工作,还是应该构建一系列循环,还是有更优雅的解决方案?
最终目标是将其保存为存储过程并调用SSIS项目。任何见解或建议表示赞赏。
select * from
(
select
ID
,OUTPUT
,case
when NOTE_TEXT = '' then case
when [SOURCE] = 'G1' and NOTE_TEXT != '' then NOTE_TEXT
when [SOURCE] = 'G2' and NOTE_TEXT != '' then NOTE_TEXT
when [SOURCE] = 'ENG' and NOTE_TEXT != '' then NOTE_TEXT
else ''
end
else NOTE_TEXT
end as NOTE_TEXT
from Table
) as temp
group by ID, OUTPUT, NOTE_TEXT
编辑:我可能一直不清楚,这是我想要使用现有的case语句或任何其他方式构建到查询中的逻辑。
- 如果NOTE_TEXT列中的所有三个ID记录都为NULL,则对NOTE_TEXT使用一个(或第一个)ID记录为NULL
- 如果所有三个ID记录在NOTE_TEXT列中具有相同的文本,请使用一个(或第一个)ID记录和NOTE_TEXT中的文本
- 如果在三个ID记录中,NOTE_TEXT列有一个文本值,其余为NULL,请使用一个(或第一个)ID记录和NOTE_TEXT中的文本
- 如果在三个ID记录中,NOTE_TEXT列有多个文本值,请对第一个记录使用第一个ID记录和NOTE_TEXT。
答案
根据@ Habo的评论,使用案例陈述是行不通的。相反,这有效。
select distinct(ID) AS ID
,'' AS OUTPUT_TYPE
, (
select top 1
NOTE_TEXT
from [table] AS t
where NOTE_TEXT is not null
and NOTE_TEXT != ''
and t.SUPPLIER_ID = s.SUPPLIER_ID
) as NOTE_TEXT
from [table] as s
以上是关于“滚动”记录一式三份,嵌套的case语句(或循环)的主要内容,如果未能解决你的问题,请参考以下文章
Sql server 未在查询中使用嵌套 case 语句更新记录
04-01 Java switchforwhiledo while语句,循环嵌套,跳转语句breakcontinuereturn