#sql
#sql
Вопрос:
Когда я выполняю приведенный ниже запрос, он выдает ошибку
"Msg 245, Level 16, State 1, Line 2
Conversion failed when converting the nvarchar value '13473,14586' to data type int."
Эта функция string_agg() работает хорошо, если эти запросы выполняются независимо. Я заметил, что эта проблема возникает только тогда, когда запрос извлекает более одной строки, а запрос извлекает последнюю строку, после чего выдает ошибку.
select (CASE WHEN row_number() over (partition by R.Productid order by R.Productid) = 1 AND
Product_type !=15 THEN
(SELECT string_agg(CAST(ISNULL(product_id,0) as nvarchar(500)),',') FROM PRODUCT
P1 WHERE P1.Productid = R.Productid and Product_type not in (4,5,15,8,6)
AND CONVERT(VARCHAR(6), P1.purchase_date, 112) <= CONVERT(VARCHAR(6),
R.purchase_date, 112))
WHEN row_number() over (partition by R.Productid order by R.Productid) >1 AND
Product_type !=15 AND row_number() over (partition by R.Productid order by
R.Productid) < Product_period THEN
(SELECT string_agg(CAST(ISNULL(product_id,0) as nvarchar(500)),',') FROM
PRODUCT P1 WHERE P1.Productid = R.Productid and Product_type not in
(4,5,15,6,8)
AND CONVERT(VARCHAR(6), P1.purchase_date, 112) = CONVERT(VARCHAR(6),
R.purchase_date, 112) )
WHEN row_number() over (partition by R.Productid order by R.Productid) >=
Product_period and Product_type !=15 THEN
(SELECT string_agg(CAST(ISNULL(product_id,0) as nvarchar(500)),',') FROM PRODUCT
P1 WHERE P1.Productid = r.Productid and Product_type in (4,5,15,6,8)
AND CONVERT(VARCHAR(6), P1.purchase_date, 112) >= CONVERT(VARCHAR(6),
R.purchase_date, 112))
ELSE 0 END ) "PRODUCT_External_Id"
from PRODUCT R
JOIN Product_Category D ON R.Productid =D.Product_ID
where D.Product_ID = R.Productid and R.Product_type in (5,15)
and Productid = 10
order by Productid,purchase_date'
Комментарии:
1. Обратите внимание, что вы продублировали условие СОЕДИНЕНИЯ. Вы можете удалить
D.Product_ID = R.Productid
из предложения WHERE.2. markheath.net/post/effective-debugging-with-divide-and-conquer
3. Я предполагаю, что вы могли бы значительно упростить запрос, чтобы изолировать ошибку … а затем предоставить образцы данных, желаемые результаты и тег в базе данных, которую вы используете.