1

レビューしていただきありがとうございます。私はどうしても助けが必要で、以下の質問を明確にすることさえできません...

SQL 2008 を使用して、5 つの列を持つテーブルをセットアップしました。

データは実質的に次のようになります。

column1 column2 column3 column4 column5
T1      N1      A1      L1      S1
T1      N2      A2      L2      S4
T1      N2      A3      L2      S2
T1      N2      A1      L2      S4
T2      N6      A3      L3      S2
T2      N7      A3      L3      S4
T2      N7      A3      L4      S4
...

同じ値を持つレコードについて、 throughcolumn1の一意の順列をそれぞれ識別したいと考えています。column2column5

次のような質問に答えたいと思います。

ケース1

どこにいくつのレコードが存在するか

column1 is the same value and
column2 is the same value and
column3 is the same value and
column4 is the same value and
column5 is different

それから

ケース 2

column1 is the same value and
column2 is the same value and
column3 is the same value and
column4 is different and
column5 is the same value

それから

ケース 3

column1 is the same value and
column2 is the same value and
column3 is the same value and
column4 is different and
column5 is different

等々。ありがとう!

4

2 に答える 2

1

case必要な順列のテーブルとクエリ内のいくつかのロジックを設定することにより、1 つのクエリでこれを行うことができます。

以下は、3 列の例です。

with t as (
      select 'a' as a, 'b' as b, 'c' as c union all
      select 'a', 'b', 'd' union all
      select 'e', 'b', 'd'
     ),
     perms as (
      select 1 as col1, 1 as col2, 1 as col3 union all
      select 1, 1, 0 union all
      select 1, 0, 0 union all
      select 0, 1, 1 union all
      select 0, 1, 0 union all
      select 0, 0, 1
     )
select (case when p.col1 = 1 then a end) as col1,
       (case when p.col2 = 1 then b end) as col2,
       (case when p.col3 = 1 then c end) as col3,
       count(*)
from t cross join
     perms p
group by (case when p.col1 = 1 then a end),
         (case when p.col2 = 1 then b end),
         (case when p.col3 = 1 then c end)
于 2013-07-02T13:49:16.830 に答える
0

うーん。手動で行いたい場合は、複数のキーを使用した group byなどで行う必要があります。たとえば、ケース 1 の場合、次のようにする必要があります。

select column1,column2,column3, column4, count(column5) group by column1,column2,column3, column4

これにより、column1-column4 の一意の組み合わせごとに一意のレコードが提供されます。区別したい場合は、おそらく前処理を行う必要があります。

より柔軟にしたい場合は、group by を実行するストア プロシージャが解決策になる可能性があります。

于 2013-07-02T13:38:29.303 に答える