2

SQL集計関数なしでピボットしたいと思います。ここでは「max」集計関数が使用されていますが、集計関数を削除すると構文エラーが表示されます。「max」集計関数を使用すると、文字列値の中で最大の文字列のみが表示され、「min」集計関数を使用すると、文字列の中で最小の文字列値が表示されます。「FieldSubValues」からのすべての文字列値である、最小値と最大値の両方が必要です。

集計関数を使用せずにピボットを行う必要があります。誰でも私を助けることができますか?

SELECT   *  
FROM
(
     SELECT FieldSubName,FieldSubValues 
    FROM FormFieldValue where FieldID=182 
)as p    
PIVOT 
( 
    min(FieldSubValues) 
    FOR FieldSubName IN ([Name],[Gender],[Days],[Message]) 
) AS pvt

ここでは、「Message」値、つまり「Testing」と「fsdfds」の両方が必要です ここに画像の説明を入力

4

1 に答える 1

2

Min()と文字列値の両方が必要な場合は、 〜を2回Max()使用できます。UNIONPIVOT

select *
from 
(
  select FieldSubName, FieldSubValues
  from FormFieldValue
) x
PIVOT
(
  min(FieldSubValues)
  for FieldSubName IN ([Name], [Gender], [Days], [Message])
) p
UNION
select *
from 
(
  select FieldSubName, FieldSubValues
  from FormFieldValue
) x
PIVOT
(
  max(FieldSubValues)
  for FieldSubName IN ([Name], [Gender], [Days], [Message])
) p

SQL FiddlewithDemoを参照してください。

max/値だけでなくすべての値が必要な場合は、サブクエリminにaを追加できます。row_number()行番号を追加することで、FieldNameにデータを分割できます。これにより、最大値と最小値だけでなく、複数の行をピボットできます。

select [Name], [Gender], [Days], [Message]
from 
(
  select FieldSubName, FieldSubValues,
    row_number() over(partition by FieldName order by FieldId) seq
  from FormFieldValue
) x
PIVOT
(
  max(FieldSubValues)
  for FieldSubName IN ([Name], [Gender], [Days], [Message])
) p;

SQL FiddlewithDemoを参照してください

于 2012-06-27T13:11:35.370 に答える