需要获取按groupid

时间:2017-07-31 23:26:55

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

我想根据groupid属性对查询数据进行分组,下图是我的表格图像

http://prntscr.com/g2qu7a

我希望它像树结构一样显示,我可以用这种格式显示数据:

Group1
    price
     length
      width
    price
     length
      width
    price
     length
      width

Group 2
   same as above 

每组下面的3个元素可以有3个或少于3个或者只有一个或者没有,我想获取数据所以我可以创建文本字段来更新我的数据库中的数据,但这不是我想要的

这是我的查询

select priceid,itemid,groupid,price,length,width from prices 

1 个答案:

答案 0 :(得分:0)

尝试使用以下概念:

插入数据:

CREATE TABLE some_table (some_data VARCHAR(20), some_other_data VARCHAR(20), groupId VARCHAR(20));
INSERT INTO some_table (some_data, some_other_data, groupId) values ('a', '1', 'id1');
INSERT INTO some_table (some_data, some_other_data, groupId) values ('b', '2', 'id1');
INSERT INTO some_table (some_data, some_other_data, groupId) values ('c', '3', 'id2');

执行查询:

SELECT '{"' + t.groupId + '": [{' + STUFF(
          (
            SELECT '{ "some_data":"' + td.some_data + '"', ', "some_other_data":' + td.some_other_data + '},'
            FROM some_table td
            WHERE t.groupId = td.groupId
            FOR XML PATH(''), TYPE
          ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') + ']}'
FROM some_table t
GROUP BY t.groupId

结果:

  

{“id1”:[{“some_data”:“a”,“some_other_data”:1},{“some_data”:“b”,“some_other_data”:2},]}

     

{“id2”:[{“some_data”:“c”,“some_other_data”:3},]}

请注意,尾随逗号不应影响数据的有效性。我对SQL Server的体验是有限的,但这应该让你开始朝着可行的方向开始。

小提琴:

http://sqlfiddle.com/#!6/66b19/35