SELECT
PDADate, T.Merchandizer_ID, T.Merchandizer, Merchandizer_LoginName,
STORE_ID, STORE_CODE, STORE_NAME,
ACCOUNT_ID, ACCOUNT_NAME, Account_Store_Format_Id, Account_Store_Format,
StoreType_Id, StoreType, T.Listid, T.Listname,
T.TimeIn, T.TimeOut, T.PlannedDate, T.Reason, TaskCode, TotalTime
FROM
[dbo].Report_RD_Coverage T
INNER JOIN
#TempLocationH TL ON TL.LocationId=T.Location_Id
WHERE
CONVERT(Date, PDADate) Between (@Start_Date) AND Isnull(@End_Date, @CurrentDate)
AND T.Account_Id IN
(SELECT
CASE WHEN @Account_Id IS NULL THEN T.Account_Id
ELSE (SELECT * FROM UDF_SplitString(@Account_Id,','))
END
)
AND T.StoreType_Id IN
(SELECT
CASE WHEN @StoreType_Id IS NULL THEN T.StoreType_Id
ELSE (SELECT * FROM UDF_SplitString(@StoreType_Id,','))
END
)
AND T.Store_Id IN
(SELECT
CASE WHEN @Store_Id IS NULL THEN T.Store_Id
ELSE (SELECT * FROM UDF_SplitString(@Store_Id,','))
END
)
Если @Account_Id
, @StoreType_Id
и @Store_Id
равны нулю тем он должен выбрать все ACCOUNT_ID
, STORETYPE_ID
и STORE_ID
в противном случае на основе значения параметра следует фильтровать.сазе в котором пункт - SQL Server 2008
UDF_SplitString
функция дробить разделенных запятыми строк, а возвращаемое значение представляет собой таблицу, как:
- 1
- 2
- 3
я получаю эту ошибку:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
работает Это означает только то, что он говорит. Заявление IN, очевидно, возвратило более одной строки. Я бы проверил каждый оператор IN и подтвердил, что он не более 1 строки возвращается. – logixologist
Я угадываю, что этот парень делает это: 'SELECT * FROM UDF_SplitString (@Account_Id, ',')) END'. Укажите имя столбца того, что возвращается в функции UDF_SplitString. – logixologist
UDF_SplitString - это функция разделения запятой, и она сохраняет значение в таблице. –