加入来自不同查询的列

时间:2018-03-29 08:31:10

标签: sql-server select while-loop

我想在0到24的where条件下使用变量执行相同的查询,并将结果连接到同一列。

DECLARE @x AS INT
SET @x = 0

WHILE @x < 24
BEGIN
    SELECT @x, COUNT(trans_num) 
    FROM [RealTimeVending].[dbo].[rtv_transactions] 
    WHERE CONVERT(DATE, trans_date) >= '2018-03-28' 
      AND DATEPART(HH, trans_date) = @x 
      AND cliente_id = 13 
    GROUP BY cliente_id

    SET @x = @x + 1
END

这就是我得到的:

enter image description here

我的解决方案的问题是我有不同的查询,我希望结果在同一列。

2 个答案:

答案 0 :(得分:3)

您不需要while循环来获取所需的输出,简单查询后应该为您提供所需的输出。

SELECT COUNT(trans_num), DATEPART(HH,trans_date)
 FROM [RealTimeVending].[dbo].[rtv_transactions] 
  where convert(date,trans_date) >= '2018-03-28' 
  and cliente_id=13
GROUP BY DATEPART(HH,trans_date)
ORDER BY DATEPART(HH,trans_date)

如果您要为单个客户cliente_id=13提取数据,那么您就不需要放置group by client_id。只有在为多个客户端提取数据时才需要它。

答案 1 :(得分:1)

PSK的答案已经过时了。避免重复DATEPART功能的一个小变化是使用子查询。请注意,我还删除了trans_date到日期部分的转换,因为它是多余的。您可以直接将日期与日期进行比较,从而产生更快的查询。

SELECT t.Hour, COUNT(*) AS Count 
FROM (
   SELECT
      DATEPART(HH,trans_date) AS Hour
   FROM [RealTimeVending].[dbo].[rtv_transactions] 
   WHERE 
      trans_date >= '2018-03-28' 
      AND cliente_id = 13
) AS t
GROUP BY Hour
ORDER BY Hour