【问题标题】:SQL - Adding columnsSQL - 添加列
【发布时间】:2021-05-10 15:05:46
【问题描述】:

我是 SQL 新手,想知道是否有人可以帮助我解决这个小请求。我试图让我的输出如下所示:

但我目前得到这个输出:

这是我的 SQL 代码:

SELECT trk_id, 
       cur_state
FROM trk_id_def
Where (trk_id like 'TPA12%' )
ORDER BY trk_id

如何让列反映 MF、CH_A、CH_B 和 CH_C 及其各自的值?

【问题讨论】:

  • 哪个 SQL? SQL 服务器? MySQL?玛丽亚数据库? PostgreSQL?别的东西? Edit 标记它。
  • 请解释一下列的逻辑。
  • -C 是最后一个可能的后缀吗?您还可以提供小提琴 (sqlfiddle.com) 以更快地获得帮助。
  • 这不是您在数据库中存储数据的方式。您需要存储三件事:一些轨道组 ID ('TPA12')、一些轨道子 ID ('A'、'B'、...) 和当前状态 ('PROD'、'NM'、.. .),因此将这三个部分分开存放。不要将组和子 ID 粘合到一个字符串 ('TPA12-A')。
  • 至于任务:空/MF、A、B 和 C 是表中唯一的子 ID(或者至少是您对此查询感兴趣的唯一子 ID)?或者在运行时是否可以将其他 ID 视为附加列?这将需要动态 SQL(即两个查询,一个基于另一个的结果)。您的查询已经为您提供了所需的所有数据。 GUI(应用程序、网站)关心网格中的显示通常是一项任务。

标签: sql oracle pivot


【解决方案1】:

你在寻找这样的东西吗?

select substr(trk_id, 1, 5),
       max(case when trk_id like '%A' then cur_state end) as state_a,
       max(case when trk_id like '%B' then cur_state end) as state_b,
       max(case when trk_id like '%C' then cur_state end) as state_c
from t
group by substr(trk_id, 1, 5)

【讨论】:

  • 是的,我是!我更改了 CH_A 和 CH_B 的代码及其输出错误数据。 select substr(trk_id, 1, 5) as Misti, max(case when trk_id like '%' then cur_state end) as M, max(case when trk_id like '%A' then cur_state end) as CH_A, max(case when trk_id like '%B' then cur_state end) as CH_B, max(case when trk_id like '%C' then cur_state end) as CH_C from trk_id_def Where (trk_id like 'TPA12%' ) group by substr(trk_id, 1, 5)
  • @Med2020: LIKE '%' 匹配任何字符串。将 max(case when trk_id like '%' then cur_state end) as M 更改为 max(case when trk_id = 'TPA12' then cur_state end) as M 以使您的查询正常工作或使用 Kazi Mohammad Ali Nur 的 max(case when trk_id = substr(trk_id, 1, 5) then cur_state end) as M
【解决方案2】:

@Med2020 您的查询应该可以正常工作。请查看下面的示例,让我知道它失败的数据。我已经更改了 M 列的条件。

架构和插入语句:

 create table trk_id_def( TRK_ID varchar(50),CUR_STATE varchar(50));

 insert into trk_id_def values('TPA12','PROD');
 insert into trk_id_def values('TPA12-A','PROD');
 insert into trk_id_def values('TPA12-B','NM');
 insert into trk_id_def values('TPA12-C','NM');

查询:

   select substr(trk_id, 1, 5) as Misti, 
     max(case when trk_id =substr(trk_id, 1, 5) then cur_state end) as M,  
     max(case when trk_id like '%-A' then cur_state end) as CH_A,        
     max(case when trk_id like '%-B' then cur_state end) as CH_B,        
     max(case when trk_id like '%-C' then cur_state end) as CH_C 
     from trk_id_def Where (trk_id like 'TPA12%' )  
     group by substr(trk_id, 1, 5);

输出:

MISTI M CH_A CH_B CH_C
TPA12 PROD PROD NM NM

dbhere

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多