Получить OrderTotal по часам для текущей даты дает ошибку подзапроса: - PullRequest
0 голосов
/ 16 июня 2020

Вот мой запрос SQL, который в настоящее время дает почасовые данные о заказе на текущую дату. Здесь мне нужно подсчитать порядок, следуя условию, если я добавлю это, я получаю ошибку подзапроса после 11:00, пожалуйста, помогите мне решить проблему.

После SQL запроса на который я выполняю:

DECLARE  @intervalMinutes int = 60
DECLARE  @schedule table (
        myId int primary key identity,
        startTime time,
        endTime time
)

DECLARE @startTime time= '12:00:00 AM'; 
DECLARE @endTime time='11:00:00 PM';

;WITH CTE AS
(
    SELECT @startTime st
        UNION ALL
    SELECT DATEADD(MINUTE,@intervalMinutes,st) 
    FROM cte 
    WHERE st < DATEADD(MINUTE,@intervalMinutes,st) 

)
INSERT INTO @schedule(startTime,endTime)
SELECT st, DATEADD(MINUTE,@intervalMinutes,st)FROM cte 

SELECT CONVERT(varchar(10), startTime, 100) + ' - ' + CONVERT(varchar(10),  endTime , 100)  AS TimeSlots,
ISNULL((SELECT CASE WHEN ISNULL(O.isAfterDiscount,0) != 0 THEN ((O.SubTotal - Total_Discount) + O.Total_Tax)
                ELSE ((O.SubTotal + O.Total_Tax) - Total_Discount)
                END AS OrderTotal FROM [dbo].[Order] AS O WHERE O.Order_Status='COMPLETED' AND 
(O.CreatedDate >= CAST(CONVERT(varchar(20), GETUTCDATE(),101)  + ' ' + CONVERT(varchar(8), startTime, 108) as datetime)) 
AND (O.CreatedDate <= CAST(CONVERT(varchar(20), GETUTCDATE(),101)  + ' ' + CONVERT(varchar(8), REPLACE(endTime,'00:00:00.000','23:59:59.999'), 108) as datetime))),0)   AS TotalSales
FROM @schedule 

При выполнении запроса возникает следующая ошибка:

following error comes while execute query

Msg 512, уровень 16, состояние 1, строка 22 Подзапрос вернул более одного значения. Это недопустимо, если подзапрос следует за =,! =, <, <=,>,> = Или когда подзапрос используется как выражение.

Следующие результаты запроса, которые мне нужно отобразить :

following query results which I need to display
Пожалуйста, расскажите мне об этом.

1 Ответ

1 голос
/ 16 июня 2020

Это означает, что вы получили много значений из подзапроса таблицы заказов. Для суммирования суммы продаж из таблицы заказов необходимо применить агрегатную функцию SUM.

SELECT CONVERT(VARCHAR(10), startTime, 100) + ' - ' + CONVERT(VARCHAR(10), endTime, 100) AS TimeSlots
    ,ISNULL((
            SELECT SUM(CASE WHEN ISNULL(O.isAfterDiscount, 0) != 0 THEN ((O.SubTotal - Total_Discount) + O.Total_Tax) ELSE ((O.SubTotal + O.Total_Tax) - Total_Discount) END) AS OrderTotal
            FROM [dbo].[Order] AS O
            WHERE O.Order_Status = 'COMPLETED'
                AND (O.CreatedDate >= CAST(CONVERT(VARCHAR(20), GETUTCDATE(), 101) + ' ' + CONVERT(VARCHAR(8), startTime, 108) AS DATETIME))
                AND (O.CreatedDate <= CAST(CONVERT(VARCHAR(20), GETUTCDATE(), 101) + ' ' + CONVERT(VARCHAR(8), REPLACE(endTime, '00:00:00.000', '23:59:59.999'), 108) AS DATETIME))
            ), 0) AS TotalSales
FROM @schedule
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...