从组强制转换SQL查询

从组强制转换SQL查询,sql,group-by,casting,Sql,Group By,Casting,我正在尝试使用“cast group by”-输出进行查询 但不知道如何解决这个问题,甚至不知道如何开始(我想我需要演员和小组,但不确定) 下面我有一些代码,希望能解释我要做的事情。 有人能帮我查询一下,以获得正确的输出吗 CREATE TABLE buyers ( id int, buyer_name varchar(20) ); INSERT INTO buyers VALUES (1, 'harry'), (2, 'zoe'), (3, 'rose');

我正在尝试使用“cast group by”-输出进行查询

但不知道如何解决这个问题,甚至不知道如何开始(我想我需要演员和小组,但不确定)

下面我有一些代码,希望能解释我要做的事情。 有人能帮我查询一下,以获得正确的输出吗

CREATE TABLE buyers
(
    id int,
    buyer_name varchar(20)
);
    
INSERT INTO buyers
VALUES (1, 'harry'), (2, 'zoe'), (3, 'rose');
    
CREATE TABLE grocery
(
    id int,
    name VARCHAR(20),
    id_buyers int
);
    
INSERT INTO grocery
VALUES (1, 'milk', 1), (2, 'milk', 1), (3, 'ham', 1), (4, 'bread', 2),
       (5, 'bread', 2), (6, 'bread', 2), (6, 'milk', 2), (7, 'milk', 2),
       (8, 'ham', 3);

CREATE TABLE wanted_output
(
    name VARCHAR(20),
    stuffed_lists VARCHAR(20)
);
    
INSERT INTO wanted_output
VALUES ('harry', '2x milk, 1x ham'), ('zoe', '3x bread, 2x milk'),
       ('rose', '1x ham ');
编辑: 在这一点上,我有这个(不工作):


nvm经过一些费德林:

    SELECT 
      buyers.buyer_name,
      COALESCE(
        STUFF(
          (SELECT ' , ' + cast(count(*) as varchar(4)) + ' x ' +
                  CAST( grocery.name AS varchar(max)) 
          from grocery 
          where grocery.id_buyers = buyers.id 
          group by grocery.name
          FOR XML PATH('')
        ), 1, 2, '' ),'') 
      
      AS wanted_output
    FROM buyers

这回答了你的问题吗?不幸的是,我没有退出,我不知道如何获得“1x”或“2x”
按杂货店分组。name
然后
cast(count(*)as varchar(4))+“x”+杂货店。name
然后根据该结果再次分组并使用
string_agg
string_agg group by对我来说有点新,你能提供一个工作示例吗?我不知道如何通过togheter.nvm 2016版获得该演员组的铜牌:(遗憾的是没有引入函数string_agg。有人能帮我介绍一个去掉string_agg的工作示例吗?
    SELECT 
      buyers.buyer_name,
      COALESCE(
        STUFF(
          (SELECT ' , ' + cast(count(*) as varchar(4)) + ' x ' +
                  CAST( grocery.name AS varchar(max)) 
          from grocery 
          where grocery.id_buyers = buyers.id 
          group by grocery.name
          FOR XML PATH('')
        ), 1, 2, '' ),'') 
      
      AS wanted_output
    FROM buyers