Я думаю, что есть ошибка в моей сводной функции SQL-сервера, потому что я не могу найти никакого другого объяснения.
Я использую простую сводную диаграмму и использую точный синтаксис, показанный в MSDN.но сводный ответ показывает одно и то же число для всех столбцов с эквивалентным значением количества всех недель !!!(слева - результат запроса, а справа - то, что я хочу)
вот мой запрос:
SELECT
*
FROM (SELECT
r.cutomer_id
,c.[Week]
,r.id
FROM r
JOIN c
ON r.Create_date = c.Date
WHERE Is_ride = 1
AND ((Create_date_int BETWEEN 20190302 AND 20190319)
OR (Create_date_int BETWEEN 20190406 AND 20190426))) p
PIVOT
(
COUNT(id)
FOR [Week] IN
([9], [10], [11], [12], [14], [15], [16], [17])
) AS pvt
вот некоторые тестовые данные, представляющие "p"output (я только что изменил номера идентификаторов, недели - это то же число, которое вы получаете из запроса)
DROP TABLE IF EXISTS #t
CREATE TABLE #t (
customer_id INT
,WEEK INT
,id INT
)
INSERT #t (customer_id, WEEK, id)
VALUES (12032, 10, 8607)
, (43551, 10, 8721051)
, (55025, 10, 81200)
, (198874, 10, 861362)
, (99675, 10, 867081)
, (19387, 10, 863656)
, (12526, 10, 8603706)
, (19503, 10, 860924)
, (37597, 10, 860909)
, (136019, 10, 8610674);
, поэтому я подумал, что с моим запросом что-то не так, но затем изменил запрос на следующий:
SELECT
r.cutomer_id
,c.[Week]
,r.id INTO #t
FROM r
JOIN c
ON r.Create_date = c.Date
WHERE Is_ride = 1
AND ((Create_date_int BETWEEN 20190302 AND 20190319)
OR (Create_date_int BETWEEN 20190406 AND 20190426))
SELECT
*
FROM #t
PIVOT
(
COUNT(id)
FOR [Week] IN
([9], [10], [11], [12], [14], [15], [16], [17])
) AS pvt
и все работает просто отлично!также, если я удаляю столбец r.id из select и изменяю его на count(week)
, он работает нормально !!!
также, если я только изменяю where
на
WHERE Is_ride = 1
AND ((Create_date_int BETWEEN 20190302 AND 20190319)
OR (Create_date_int BETWEEN 20190406 AND 20190426))
and passenger_id in (43551,12032,136019)
) p
itработает отлично!!!
Может кто-нибудь дать мне объяснение?