我想在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
这就是我得到的:
我的解决方案的问题是我有不同的查询,我希望结果在同一列。
答案 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