Мне нужно иметь количество активов в SalesOrderLine, где SalesOrderLine.Shipped <> 'C'. Следующий SQL-запрос не извлекает никаких строк, если в SalesOrderLine нет ни одной строки или для всех этих строк SalesOrderLine.Shipped = 'C'.
Подскажите, пожалуйста, где я здесь не прав?
Чтобы быть более конкретным:
- Все столбцы имеют символьный тип данных (в основном nvarchar).
Если я удалю
AND SalesOrderLine.Shipped <> ''C''
из части WHERE, он получает несколько строк. Конечно, это не то, что мне нужно.
Вот пример одной SO с 140 активами, которая для всех, SalesOrderLine.Shipped = 'C'
:
Order No Customer Name Customer PO Asset Count SO Status Released Raised Date Order Type Address Deliveries (Connotes)
O30540 ITPG Group IAL4445, IAL3062 140 Cancelled NO 11/01/2015 Sold NYIAL5554, ITPL6032 NULL
Вот запрос:
('SELECT SalesOrderHeader.OrderNo AS [Order No], SalesOrderHeader.CustomerName AS [Customer Name], SalesOrderHeader.Reference1 AS [Customer PO], COUNT(SalesOrderLine.Barcode) AS [Asset Count],
LookUpData.CategoryLink AS [SO Status], (CASE WHEN isReleased = ''1'' THEN ''YES'' ELSE ''NO'' END) AS Released, SalesOrderHeader.RaisedDate AS [Raised Date], SalesOrderHeader.Ordertype AS [Order Type],
SalesOrderHeader.DeliverySuburb + SalesOrderHeader.DeliveryAddress1 AS [Address], (CASE WHEN LEN(pre_trimmed.DeliveryNo) < 1 THEN pre_trimmed.DeliveryNo ELSE LEFT(pre_trimmed.DeliveryNo , LEN(pre_trimmed.DeliveryNo)-1) END) AS [Deliveries (Connotes)]
FROM SalesOrderHeader
INNER JOIN LookUpData ON SalesOrderHeader.Status = LookUpData.CategoryName
INNER JOIN SalesOrderLine ON SalesOrderHeader.OrderNo = SalesOrderLine.OrderNo
LEFT JOIN DeliveryHeader ON SalesOrderHeader.OrderNo = DeliveryHeader.OrderNo
CROSS APPLY
(
SELECT DeliveryNo + '' ('' + Connote + ''), ''
FROM DeliveryHeader AS intern
WHERE DeliveryHeader.OrderNo = intern.OrderNo
FOR XML PATH('''')
) pre_trimmed (DeliveryNo)
WHERE
' + @FieldName + ' Like ''%' + @FieldValue + '%''
AND (LookUpData.Category = ''SOStatus'' AND SalesOrderLine.Shipped <> ''C'')
GROUP BY SalesOrderHeader.OrderNo , SalesOrderHeader.CustomerName, SalesOrderHeader.Reference1 ,
LookUpData.CategoryLink, SalesOrderHeader.RaisedDate, SalesOrderHeader.Ordertype,
SalesOrderHeader.DeliverySuburb, SalesOrderHeader.DeliveryAddress1, pre_trimmed.DeliveryNo, SalesOrderHeader.isReleased
ORDER BY SalesOrderHeader.CustomerName, SalesOrderHeader.OrderNo')