2013-05-16 57 views
0

我想从一个表中选择特定数据集,然后显示他们下了单场分组。然而,这为每个案例陈述创建一条线。SQL服务器:多行返回CASE WHEN

我非常希望看到与每个反对领域的每一个报价单行。

有没有人有任何想法如何,我可以改进什么香港专业教育学院这样做的远?

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' 
+0

你能为你的当前和所需输出 – WiiMaxx

回答

1

添加GROUP BY条款

SELECT ..., 
     MAX(CASE WHEN FieldName = 'QTY001' THEN AlphaValue ELSE null END) as [QTY], 
     ..... 
FROM... 
WHERE... 
GROUP BY KeyField 
+0

提供简单的例子,当你知道怎么回事,就知道本集团,但不是MAX,非常感谢你。 –

+0

您的欢迎':)' –

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 
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 

在其他情况下,您的解决方案是实现的唯一途径。

SQLFiddle