2017-12-08 6 views
0

こんにちはすべての行を1つに丸めようとしています。 MAX Caseを試してみましたが、ケースでは数値ではない文字列があり、データをロールアップしようとしていません。私は他の例を見つけようとしましたが、私はあなたの助けを求めていません。事前に感謝非数値の場合は、大文字と小文字を組み合わせます。

私は異なるデータを持っているが、すべてが同じ管理番号を持っているので、私は1つの行にロールバックされた管理番号のすべてのデータを取得する必要があります。

SELECT CNTL_NUM 
    ,TRANS_TYP 
    ,CASE WHEN SEQ_NUM = '02' THEN SUBSTRING(TRANS_INFO,28,9) END AS 'SSN' 
    ,CASE WHEN SEQ_NUM = '11' THEN SUBSTRING(TRANS_INFO,46,2) END AS 'IPS_STATE' 
    FROM LVJPROD.IPS_LNA 
    WHERE TRANS_TYP = 'TA' 
    GROUP BY CNTL_NUM, TRANS_TYP,SEQ_NUM,TRANS_INFO 
    order by CNTL_NUM 

私はすべての6行が再びグループにそれらをすることができます

enter image description here

答えて

0

の下のスクリーンショットから1にロールアップを取得するために期待しています。問題は、データを操作するcase文にあります。だから、サブクエリとしてこれらを治療し、外部クエリでグループ化を持っている必要がありますとMAX

WITH yourtable 
AS (SELECT cntl_num, 
      trans_typ, 
      CASE 
       WHEN seq_num = '02' THEN Substring(trans_info, 28, 9) 
      END AS ssn, 
      CASE 
       WHEN seq_num = '11' THEN Substring(trans_info, 46, 2) 
      END AS ips_state 
    FROM lvjprod.ips_lna 
    WHERE trans_typ = 'TA' 
    GROUP BY cntl_num, 
       trans_typ, 
       seq_num, 
       trans_info) 
SELECT cntl_num, 
     trans_typ, 
     Max(ssn), 
     Max(ips_state) 
FROM yourtable 
GROUP BY cntl_num, 
      trans_typ 
ORDER BY cntl_num; 

OR

SELECT cntl_num, 
     trans_typ, 
     Max(ssn), 
     Max(ips_state) 
FROM (SELECT cntl_num, 
       trans_typ, 
       CASE 
       WHEN seq_num = '02' THEN Substring(trans_info, 28, 9) 
       END AS ssn, 
       CASE 
       WHEN seq_num = '11' THEN Substring(trans_info, 46, 2) 
       END AS ips_state 
     FROM lvjprod.ips_lna 
     WHERE trans_typ = 'TA' 
     GROUP BY cntl_num, 
        trans_typ, 
        seq_num, 
        trans_info) a 
GROUP BY cntl_num, 
      trans_typ 
ORDER BY cntl_num; 
+0

を動作するはずです、これは知事であるありがとう! – DWS

+0

うれしかったです。これを受け入れるか、アップしてください。これは便利です。 – SriniV

関連する問題