sql查询在一行中获取多个记录

时间:2013-10-08 09:56:26

标签: sql sql-server sql-server-2008

我正在处理查询以获得每个产品的1row但问题是有多个记录,其中包含1个产品的属性。

TABLE PRODUCTS_DATA

NAME :  DESC.  | ID|FIELD1|FIELD2|FIELD3|FIELD4|
Row 1:PRODUCT1 | 1 | 200  | high |      |      | 
Row 2:PRODUCT1 | 2 |  10  |      | low  |      |
Row 3:PRODUCT1 | 3 |      |      |      | 10   | 

现在我想获得一个查询,该查询只显示包含所有这些属性的一条记录。

第1行:PRODUCT1|200|10|HIGH|LOW|10

因为

row 1 | id1 | field 1 contains length data
row 2 | id2 | field 1 contains amount data

世界上怎么可能得到这样的结果?

3 个答案:

答案 0 :(得分:1)

我想你现在会得到你的解决方案,亲爱的......

   SELECT 
   SS.[DESC], 
   (SELECT '|' + US.FIELD1
    FROM XYZ US
    WHERE US.[DESC] = SS.[DESC]
    FOR XML PATH('')) [FIELD1],
    (SELECT '|' + US.FIELD2
    FROM XYZ US
    WHERE US.[DESC] = SS.[DESC]
    FOR XML PATH('')) [FIELD2],
    (SELECT '|' + US.FIELD3
    FROM XYZ US
    WHERE US.[DESC] = SS.[DESC]
    FOR XML PATH('')) [FIELD3],
    (SELECT '|' + US.FIELD4
    FROM XYZ US
    WHERE US.[DESC] = SS.[DESC]
    FOR XML PATH('')) [FIELD4]
FROM XYZ SS
GROUP BY SS.[DESC]
ORDER BY 1

答案 1 :(得分:0)

您需要注意两个“field1”列的语义。您将在示例结果中显示两者。据推测,你可能最终得到每一行的四个字段中的每一个数据,因此具有重复列名称的长度变化很大,这似乎对我不利。 (或者您需要修复插入数据的任何内容以使用真正的主键!)

答案 2 :(得分:0)

请尝试此操作,假设PRODUCTS_DATA.PRODUCT_DESC列提供产品说明(DESC。):

SELECT PRODUCT_DESC,MAX(FIELD1),MAX(FIELD2),MAX(FIELD3),MAX(FIELD4) FROM PRODUCTS_DATA
GROUP BY PRODUCT_DESC;