1

すでに対処した質問のバージョンを確認しましたが、見つけたいくつかの良いヒント (たとえば、rank() over (partition...) を使用) は、使用している Sybase バージョンでは機能しないようです。

次のように整理されたデータを取得する手順を実行したいと考えています。

メール | 優先
メール1 | PreferenceXYZ
メール 1 | 好みABC

そして、次のようなテーブルにレンダリングします。

メール | 好み1 | Preference2
メール 1 | PreferenceXYZ | 好みABC

本質的に、私は同じ人物に対して複数のレコードを持っており (一意の識別子として電子メール レコードを介して最もよく識別されます)、特定のユーザーのこれらの複数の設定を取得し、ユーザーごとに (電子メールごとに) 1 つの個別のレコードを作成したいと考えています。

4

1 に答える 1

2

設定が 2 つしかない場合は、 と を使用できmin()ますmax()

select email, min(preference) as preference1,
       (case when min(preference) <> max(preference) then max(preference) end) as preference2
from t
group by email;

編集:

最大 7 つの値がある場合は、次を使用してピボットしrow_number()ます。

select email,
       max(case when seqnum = 1 then preference end) as preference1,
       max(case when seqnum = 2 then preference end) as preference2,
       max(case when seqnum = 3 then preference end) as preference3,
       max(case when seqnum = 4 then preference end) as preference4,
       max(case when seqnum = 5 then preference end) as preference5,
       max(case when seqnum = 6 then preference end) as preference6,
       max(case when seqnum = 7 then preference end) as preference7
from (select t.*, row_number() over (partition by email order by preference) as seqnum
      from t
     ) t
group by email;

編集II:

実際には、次の代わりに相関サブクエリを使用してこれを行うことができますrow_number()

select email,
       max(case when seqnum = 1 then preference end) as preference1,
       max(case when seqnum = 2 then preference end) as preference2,
       max(case when seqnum = 3 then preference end) as preference3,
       max(case when seqnum = 4 then preference end) as preference4,
       max(case when seqnum = 5 then preference end) as preference5,
       max(case when seqnum = 6 then preference end) as preference6,
       max(case when seqnum = 7 then preference end) as preference7
from (select t.*,
             (select count(*)
              from t t2
              where t2.email = t.email and
                    t2.preference <= t.preference
             ) as seqnum
      from t
     ) t
group by email;
于 2013-12-22T04:04:54.107 に答える