1

これらの複数の行を 1 つの行に変換するにはどうすればよいでしょうか。N と Y は bool 値です。

Id  IsPnt IsPms, IsPdt  
1   N     Y      N  
1   N     Y      N  
1   Y     N      N

これに

Id  IsPnt IsPms, IsPdt  
1   Y     Y      N 

編集:

結果セットを生成するクエリは次のようになります

select b.id, 
    CASE mpft.PlanIndCd WHEN 'PBMN' THEN 1 ELSE 0 END AS IsPnt,
    CASE mpft.PlanIndCd WHEN 'PBMT' THEN 1 ELSE 0 END AS IsPbt,
    CASE mpft.PlanIndCd WHEN 'PBMS' THEN 1 ELSE 0 END AS IsPms
from vw_D_SomveViewName pb
   -- bunch of joins 
where mpft.PlanIndCd in ('HANR', 'PBMN','PBMT','PBMS','HAWR')
4

4 に答える 4

4

MAX()値が本当に唯一のものYである場合は、単にこれを使用できます。N

SELECT ID, MAX(IsPnt) IsPnt, MAX(IsPms) IsPms, MAX(IsPdt) IsPdt
FROM   tableName
GROUP  BY ID

更新 1

SELECT  b.id, 
        MAX(CASE mpft.PlanIndCd WHEN 'PBMN' THEN 1 ELSE 0 END) AS IsPnt,
        MAX(CASE mpft.PlanIndCd WHEN 'PBMT' THEN 1 ELSE 0 END) AS IsPbt,
        MAX(CASE mpft.PlanIndCd WHEN 'PBMS' THEN 1 ELSE 0 END) AS IsPms
FROM    vw_D_SomveViewName pb
        -- bunch of joins 
WHERE   mpft.PlanIndCd in ('HANR', 'PBMN','PBMT','PBMS','HAWR')
GROUP   BY b.ID
于 2013-04-02T14:16:13.433 に答える
1

これは機能しますか?

select
  id,
  max(IsPnt),
  max(IsPms),
  max(IsPdt)
from
  table
GROUP BY
  id
于 2013-04-02T14:17:25.957 に答える
0

質問を編集した後、次のような式PIVOTを使用する代わりに、テーブル演算子を直接使用できます。MAX

SELECT
  Id,
  PBMN AS IsPnt,
  PBMT AS IsPbt,
  PBMS AS IsPms
FROM
(
   SELECT
     id,
     mpft.PlanIndCd, 
     ROW_NUMBER() OVER(PARTITION BY id
                       ORDER BY ( SELECT 1)) AS RN
   from vw_D_SomveViewName pb
   -- bunch of joins 
   where mpft.PlanIndCd in ('HANR', 'PBMN','PBMT','PBMS','HAWR')
) AS t
PIVOt
(
   MAX(RN)
   FOR PlanIndCd IN ([PBMN], [PBMT], [PBMS])
) AS p;

次のデモ例で実際の動作を確認できます。

SQL Fiddle のデモ

于 2013-04-02T14:32:25.317 に答える
-5
select Id, MAX(IPnt), MAX(IsPms), MAX(IsPdt) 
from table etc
于 2013-04-02T14:17:25.407 に答える