1

集計関数()を作成したくありませんsum, count, maxPIVOTそれが必要です。

私の問題は、私が生まれるずっと前に、おそらくデータを2つの列として「読み取り」、実際には列ごとに1つの値に「n」レコードを掛けた列データである必要があるということです。

彼らのデータセット:

(RECORDSET, NAME, VALUE)
(1, FIELD1, char1-1)
(1, FIELD2, char2-1)
(1, FIELD3, int3-1)
(1, FIELD4, char4-1)
(…)
(…)
(…)
(1, FIELD26, float26-1)
(2, FIELD1, char1-2)
(2, FIELD2, char2-2)
(2, FIELD3, int3-2)
(2, FIELD4, char4-2)
(…)
(…)
(…)
(2, FIELD26, float26-2)
(3, FIELD1, char1-3)
(3, FIELD2, char2-3)
(3, FIELD3, int3-3)
(3, FIELD4, char4-3)
(…)
(…)
(…)
(3, FIELD26, float26-3)

26レコードの各セットを次のようにする必要があります。

FIELD1......FIELD2......FIELD3......FIELD4.............FIELD 26
char1-1.....char2-1.....int3-1......char4-1............float26-1
char1-2.....char2-2.....int3-2......char4-2............float26-2
char1-3.....char2-3.....int3-3......char4-3............float26-3

等々。

4

1 に答える 1

1

I would use pivot so I included a pivot version and some other options as well.

A version with pivot and an aggregate. SE-Data

select P.FIELD1, P.FIELD2, P.FIELD3, P.FIELD4
from YourTable T
pivot (min(T.VALUE) for T.NAME in (FIELD1, FIELD2, FIELD3, FIELD4)) P

A version without pivot but still using an aggregate. SE-Data

select min(case when T.NAME = 'FIELD1' then T.VALUE end) as FIELD1,
       min(case when T.NAME = 'FIELD2' then T.VALUE end) as FIELD2,
       min(case when T.NAME = 'FIELD3' then T.VALUE end) as FIELD3,
       min(case when T.NAME = 'FIELD4' then T.VALUE end) as FIELD4
from (select RECORDSET, NAME, VALUE from YourTable) T
group by T.RECORDSET

No pivot and no aggregate. SE-Data

select T.R.value('(VALUE[@Name = "FIELD1"])[1]', 'varchar(10)') as FIELD1,
       T.R.value('(VALUE[@Name = "FIELD2"])[1]', 'varchar(10)') as FIELD2,
       T.R.value('(VALUE[@Name = "FIELD3"])[1]', 'varchar(10)') as FIELD3,
       T.R.value('(VALUE[@Name = "FIELD4"])[1]', 'varchar(10)') as FIELD4
from
    (
      select (select T1.NAME as "@Name",
                     T1.VALUE as "*"
              from @T T1
              where T1.RECORDSET = T.RECORDSET
              for xml path('VALUE'), root('RECORDSET'), type)
      from YourTable T
      group by T.RECORDSET
      for xml path(''), type
    ) X(XML)
  cross apply X.XML.nodes('RECORDSET') as T(R)

Another no pivot no aggregate version. SE-Data

select (select T2.VALUE
        from YourTable T2
        where T.RECORDSET = T2.RECORDSET and
              T2.NAME = 'FIELD1') as FIELD1,
       (select T2.VALUE
        from YourTable T2
        where T.RECORDSET = T2.RECORDSET and
              T2.NAME = 'FIELD2') as FIELD2,
       (select T2.VALUE
        from YourTable T2
        where T.RECORDSET = T2.RECORDSET and
             T2.NAME = 'FIELD3') as FIELD3,
       (select T2.VALUE
        from YourTable T2
        where T.RECORDSET = T2.RECORDSET and
             T2.NAME = 'FIELD4') as FIELD4
from YourTable T
group by T.RECORDSET
于 2012-05-23T05:15:29.677 に答える