“滚动”记录一式三份,嵌套的case语句(或循环)

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

我有一个包含四列的表:ID,OUTPUT,NOTE_TEXT,SOURCE

ID值一式三份,因为我从三个不同的SOURCE中取出了所有的联合(一个联合不起作用,这很糟糕)。有效地使每条记录重复三次。

我需要将这些一式三份的ID值分解为每个ID一个记录。

下面是每个ID三次重复的NOTE_TEXT值的四种数据变体的屏幕截图:

Table

以下是来自以下查询的示例输出:

Output

从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。
sql tsql ssms-2012
1个回答
0
投票

根据@ 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
© www.soinside.com 2019 - 2024. All rights reserved.