1

複数の列に値を返す複雑な SQL があるため、出力を 1 つの行に返す必要があります。

select distinct TableA.ColumnA, d.name,
      (CASE WHEN rel1.REL_TYPE = 'FG' THEN 'Y' ELSE 'N' END) AS  FG
      (CASE WHEN rel2.REL_TYPE = 'F1' THEN 'Y' ELSE 'N' END) AS  F1,
      (CASE WHEN rel3.REL_TYPE = 'F2' THEN 'Y' ELSE 'N' END) AS  F2,
      (CASE WHEN rel4.REL_TYPE = 'F3' THEN 'Y' ELSE 'N' END) AS  F3 
 from TableA d
      inner join TableB p on TableA.ColumnA = p.ColumnB
      inner join TableC rel1 on  TableA.ColumnA = rel1.ColumnC  
        inner join TableC rel2 on  TableA.ColumnA = rel2.ColumnC 
        inner join TableC rel3 on  TableA.ColumnA = rel3.ColumnC 
        inner join TableC rel14 on  TableA.ColumnA = rel4.ColumnC        
where d.language_id   = -1  and  TableA.ColumnA = 53635
  and p.language_id   = -1
order by 1
 with ur;

出力には複数の行があり、単一の行に出力する必要があります

53635   Fitness Fleece, Jacket  N   N   N   N
53635   Fitness Fleece, Jacket  N   N   N   Y
53635   Fitness Fleece, Jacket  Y   N   N   N
53635   Fitness Fleece, Jacket  Y   N   N   Y
53635   Fitness Fleece, Jacket  N   Y   N   N
53635   Fitness Fleece, Jacket  N   Y   N   Y
53635   Fitness Fleece, Jacket  Y   Y   N   N
53635   Fitness Fleece, Jacket  Y   Y   N   Y
53635   Fitness Fleece, Jacket  N   N   Y   N
53635   Fitness Fleece, Jacket  N   N   Y   Y
53635   Fitness Fleece, Jacket  Y   N   Y   N
53635   Fitness Fleece, Jacket  Y   N   Y   Y
53635   Fitness Fleece, Jacket  N   Y   Y   N
53635   Fitness Fleece, Jacket  N   Y   Y   Y
53635   Fitness Fleece, Jacket  Y   Y   Y   N
53635   Fitness Fleece, Jacket  Y   Y   Y   Y

FG、F1、F2、および F3 の rel_type に対応して Y または N を表示する単一行の出力を探しています (rel_type は、MN、OG などの多くの rel_type で構成されます)。

53635   Fitness Fleece, Jacket  Y   Y   Y   N
4

1 に答える 1

2

わかりました、やっと要件を理解できたと思います。andMAXを使用できます-- テーブル自体を結合する必要はありません。CASEGROUP BY

select columna, 
  name,
  max(case when rel_type = 'FG' then 'Y' else 'N' end) 'FG',
  max(case when rel_type = 'F1' then 'Y' else 'N' end) 'F1',
  max(case when rel_type = 'F2' then 'Y' else 'N' end) 'F2',
  max(case when rel_type = 'F3' then 'Y' else 'N' end) 'F3'
from tablea
group by columna, name

SQL フィドルのデモ

明らかにWHERE基準を追加し直しますが、これはあなたが探しているものでなければなりません。

于 2013-03-29T19:54:46.053 に答える