2011-04-07 43 views
2

我正在使用我没有创建的数据库,因此无法更改它 - 但是我正在使用查询来提取我需要的数据 - 我有一个表有如下的条目。SQL查询返回来自不均匀行的结果

12562 1 Orange 
12562 2 with skin 
12562 3 without skin 
12562 4 flesh only 
12563 1 Peach 
12563 2 by box 
12564 1 Strawberry 
12564 2 mixed 

我试图得到在同一行上togther放置每件ID

12562 1 Orange 2 with skin 3 Without skin 4 flesh only 
12563 1 Peach 2 by box 

第一列是项目ID,所述第二基准和所述条目第三个数据 - 所有的产品都有一个参考1和2,所以得到这些行很容易 - 有一些有3然而,我最终只有1和2的数据或只有数据的条目,有1,2和3

任何人都可以给我一个正确的方向推动获得一个完整的结果显示所有记录,但每行1个完整记录的方法?

我想那一定是某种IF语句..

谢谢 - 对不起,絮絮叨叨。

尼尔

PS。对不起,是的,这是为Microsoft SQL Server 2000上使用 - 8.00.760 Service Pack 3的

+0

使用它发现的存储过程。这是聚合/连接字符串的情况下,按特定顺序? – MatBailie 2011-04-07 11:43:26

+0

并且可以将不同数量的项目连接在一起? – MatBailie 2011-04-07 11:49:41

回答

1

使用左连接用于可选的引用:

select r1.Id, r1.Name, r2.Name, r3.Name, r4.Name 
from Entries r1 
inner join Entries r2 on r2.Id = r1.Id and r2.Reference = 2 
left join EntrieS r3 on r3.Id = r1.Id and r3.Reference = 3 
left join EntrieS r4 on r4.Id = r1.Id and r4.Reference = 4 
where r1.Reference = 1 

这将返回空值的字段那里没有匹配的记录在左连接:

12562 Orange  with skin without skin flesh only 
12563 Peach  by box  NULL   NULL 
12564 Strawberry mixed  NULL   NULL 
+0

感谢Guffa - 效果很好 - 真的很感谢你在这方面的时间; o) – Neil 2011-04-07 14:13:31

0

的Oracle 11g具有的功能LISTAGG这一点。

其他DBMS中可能有类似的东西。

0

如果你使用MySQL,你可以使用group_concat

SELECT id, GROUP_CONCAT(CONCAT(reference, " ", data) SEPARATOR " ") as result 
FROM tablename 
GROUP BY id 
2

您应该使用PIVOT

SELECT 
     id, [1], [2], [3], [4] 
FROM (SELECT 
      id, data, reference 
      FROM yourtable 
     ) p PIVOT (min(data) FOR [reference] 
         IN ([1],[2],[3],[4]) 
       ) AS pvt 

为SQL Server,因为你没有在你的问题注明)结果是

 
id  1    2    3     4 
12562 Orange  with skin  without skin  flesh only 
12563 Peach   by box  NULL    NULL 
12564 strawberry mixed   NULL    NULL 

更新 对于2005年之前的SQL服务器

运行在http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables

execute crosstab 
      'select id from yourtable group by id', 
      'min(data)', 
      'reference', 
      'yourtable' 
+0

我觉得这是一个真正的白痴 - 这或那是那些日子之一..感谢仍然收到错误 - 无法解析,然后出现语法错误 - 将重新检查一切。 – Neil 2011-04-07 13:00:53

+0

@Neil,你使用的是什么MS-SQL-Server版本(* PIVOT仅在2005年以后可用*)? (*还需要使用你自己的字段和表名.. *) – 2011-04-07 13:07:24

+0

Aha会解释它DOH - Microsoft SQL Server 2000 - 8.00.760 Service Pack 3 - 可能会很好的向你提及这个; o) - 感谢您的时间 - 任何建议? – Neil 2011-04-07 13:21:29