У меня есть этот запрос, whoch работает нормально, когда я тестирую его в Access, но я запускаю его из TSQL во внешней программе на C # (честно, я все еще изучаю термины, поэтому я думаю, TSQL является правильным для того, что я делаю (не было)). Когда я пытаюсь сохранить процедуру в табличном адаптере в моем XSD-файле, я получаю сообщение об ошибке (см. Ниже запрос). В результате правильная XML-схема не создается автоматически. В то время как запрос все еще выполняет , он также выдает ошибку. Я бы хотел, чтобы он работал без ошибок, но не могу понять, где на самом деле эта ошибка. Я попытался удалить все "=", заменив IIF на операторы CASE, но затем я получил другие ошибки (я могу опубликовать эту попытку, если это будет полезно)
SELECT IIF(ISNULL(Owners.OwnFirstName), Owners.OwnLastName,
Owners.OwnFirstName + ' ' + Owners.OwnLastName) AS [Owner's Name], SUM(iif(UnitBarcodes.NephStatus = 'N', 1, 0))
AS [Neph units], SUM(iif(UnitBarcodes.NephStatus = 'F', 1, 0)) AS [Filter units], COUNT(UnitBarcodes.NephStatus)
AS [Total Units]
FROM (Owners INNER JOIN
((UnitBarcodes INNER JOIN
AssembledUnits ON UnitBarcodes.ID = AssembledUnits.CaseID) INNER JOIN
OwnerUnits ON AssembledUnits.ID = OwnerUnits.AssembledUnitID) ON Owners.ID = OwnerUnits.OwnerID)
GROUP BY IIF(ISNULL(Owners.OwnFirstName), Owners.OwnLastName,
Owners.OwnFirstName + ' ' + Owners.OwnLastName)
Сообщение об ошибке от Query Builder
Error in list of function arguments: '=' not recognized.
Unable to parse query text.
В любом случае, спасибо за помощь!
EDIT:
Это была моя предыдущая попытка заменить IIF на CASE
SELECT (case when ISNULL(Owners.OwnFirstName) then Owners.OwnLastName else (Owners.OwnFirstName + ' ' + Owners.OwnLastName) end) AS [Owner's name],
SUM(case where UnitBarcodes.NephStatus = 'N' then 1 else 0 end))
AS [Neph units], SUM( case when UnitBarcodes.NephStatus = 'F' then 1 else 0 end)) AS [Filter units], COUNT(UnitBarcodes.NephStatus)
AS [Total units]
FROM (Owners inner JOIN
((UnitBarcodes inner JOIN
AssembledUnits ON UnitBarcodes.ID = AssembledUnits.CaseID) INNER JOIN
OwnerUnits ON AssembledUnits.ID = OwnerUnits.AssembledUnitID) ON Owners.ID = OwnerUnits.OwnerID)
GROUP BY (case when ISNULL(Owners.OwnFirstName) then Owners.OwnLastName else (Owners.OwnFirstName + ' ' + Owners.OwnLastName) end) AS [Owner's name]
И я получаю ошибку
Error in list of function arguments: 'ISNULL' not recognized.
Error in list of function arguments: ')' not recognized.
Unable to parse query text.
EDIT2:
Так что этот запрос работает просто отлично
SELECT IIF(ISNULL(Owners.OwnFirstName), Owners.OwnLastName,
Owners.OwnFirstName + ' ' + Owners.OwnLastName) AS [Owner's Name], COUNT(UnitBarcodes.NephStatus)
AS [Total units]
FROM (Owners INNER JOIN
((UnitBarcodes INNER JOIN
AssembledUnits ON UnitBarcodes.ID = AssembledUnits.CaseID) INNER JOIN
OwnerUnits ON AssembledUnits.ID = OwnerUnits.AssembledUnitID) ON Owners.ID = OwnerUnits.OwnerID)
GROUP BY IIF(ISNULL(Owners.OwnFirstName), Owners.OwnLastName,
Owners.OwnFirstName + ' ' + Owners.OwnLastName)
Но как только я добавлю любую сумму (будь то через CASE или IIF), запрос выдаст ошибку.