sql - SQL 查询中缺少行
问题描述
我需要了解 SalesOrderLine 上的资产数量,其中 SalesOrderLine.Shipped <> 'C'。如果 SalesOrderLine 中没有行或所有行 SalesOrderLine.Shipped = 'C',则以下 SQL 查询不会检索任何行。你能告诉我我在哪里错了吗?
更加具体:
- 所有列都有字符数据类型(主要是 nvarchar)。
如果我删除
AND SalesOrderLine.Shipped <> ''C''
从 WHERE 部分,它检索一些行。当然这不是我需要的。
以下是一个拥有 140 项资产的 SO 示例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')
解决方案
我同意史瑞克和佐哈尔的观点,即您应该提供更多信息。它会鼓励有人帮助你。
照这样说。在您花费太多时间之前,可以尝试以下简单的更改。更换您的可疑线路
AND SalesOrderLine.Shipped <> ''C''
与以下行
AND UPPER(LTRIM(RTRIM(SalesOrderLine.Shipped))) <> ''C''
以下是供您方便参考的解释。
- 根据您提到的症状,您可能有不需要的空格或区分大小写的问题。
- 您可能有一个表
Shipped
列的数据类型,而不是. 所以我试图摆脱周围的任何空间。(PS -如果它适用于您的版本,甚至可以完成这项工作,您可以)SalesOrderLine
VARCHAR
NVARCHAR
LTRIM
RTRIM
TRIM
RTRIM
- 您也可能有一些区分大小写的问题。通常字符串比较不区分大小写。不过,您可能有一些混乱的设置。
@mike - 看看这是否有帮助。
推荐阅读
- python - 将 Oauth2 与请求正文一起使用
- flutter - 当我尝试访问时,我的相机胶卷被随机播放
- c++ - VS2019 无法正确导入 Qt Designer 项目
- android - PackageManager.getApplicationLabel() 可以为空吗?
- python - 尝试编写一个函数,生成 M 个长度为 N 的正态分布样本
- windows - 使用 RunAsInvoker .bat 用于初始向导中的其他安装
- mysql - 来自 kafka spark 2.4.5 的 Spark 结构化流未保存到 mysql db
- swift - NSTouchBar 没有释放最后一次触摸的视图
- php - 如何在 Icecast 中获得即将播放的歌曲?(使用 MySQL 进行冰播)
- c# - 使用 Blazor 和 Aspnet Webapi 跟踪 HttpClient.PostAsync 进度