0

単一のテーブルから特定のデータ セットを選択し、それらを単一のフィールドにグループ化して表示しようとしています。ただし、これにより、case ステートメントごとに行が作成されます。

理想的には、Quote ごとに 1 行を表示し、それに対して各フィールドを表示したいと考えています。

これまでに行ったことを改善する方法を知っている人はいますか?

select
   KeyField as Quote,
   CASE WHEN FieldName = 'QTY001' THEN AlphaValue ELSE null END as [QTY],
   CASE WHEN FieldName = 'CON002' THEN AlphaValue ELSE null END as [Conductors],
   CASE WHEN FieldName = 'COP001' THEN AlphaValue ELSE null END as [Copper Size],
   CASE WHEN FieldName = 'COR001' THEN AlphaValue ELSE null END as [Core Length],
   CASE WHEN FieldName = 'COR002' THEN AlphaValue ELSE null END as [Core Inside],
   CASE WHEN FieldName = 'END001' THEN AlphaValue ELSE null END as [End Winding],
   CASE WHEN FieldName = 'KV_001' THEN AlphaValue ELSE null END as [KV],
   CASE WHEN FieldName = 'KW_001' THEN AlphaValue ELSE null END as [KW],
   CASE WHEN FieldName = 'NAM001' THEN AlphaValue ELSE null END as [OEM],
   CASE WHEN FieldName = 'SLO001' THEN AlphaValue ELSE null END as [Slots],
   CASE WHEN FieldName = 'SPE001' THEN AlphaValue ELSE null END as [Speed],
   CASE WHEN FieldName = 'TUR001' THEN AlphaValue ELSE null END as [Turns],
   CASE WHEN FieldName = 'TYP001' THEN AlphaValue ELSE null END as [Type/Description]
from 
   AdmFormData 
where 
   FormType = 'QOT'
4

3 に答える 3

1

複数のステートメントの代わりにcase when ...、SQLServer の PIVOT 機能を使用できます。

select
   KeyField as Quote,
   [QTY001] as [QTY],
   [CON002] as [Conductors],
   [COP001] as [Copper Size],
   [COR001] as [Core Length],
   [COR002] as [Core Inside],
   [END001] as [End Winding],
   [KV_001] as [KV],
   [KW_001] as [KW],
   [NAM001] as [OEM],
   [SLO001] as [Slots],
   [SPE001] as [Speed],
   [TUR001] as [Turns],
   [TYP001] as [Type/Description]
from 
   (select KeyField, FieldName, AlphaValue 
    from AdmFormData
    where FormType ='QOT') as s
pivot
   (max(AlphaValue) for FieldName in 
    ([QTY001], [CON002], [COP001], [COR001], [COR002], [END001], [KV_001], [KW_001], [NAM001], [SLO001], [SPE001], [TUR001], [TYP001])
   ) as p
于 2013-05-16T09:53:59.853 に答える
0

MSSQL 2005 以降を使用している場合は、PIVOTコマンドを使用できます。

SELECT KeyField, [QTY001], [CON002], [COR001]
FROM (
    SELECT KeyField, FieldName, AlphaValue FROM data
  ) AS SourceTable
PIVOT (
    MAX(AlphaValue)
    FOR FieldName IN([QTY001], [CON002], [COR001])
  ) AS PivotTable

それ以外の場合は、ソリューションがそれを達成する唯一の方法です。

SQLフィドル

于 2013-05-16T09:55:15.150 に答える