【问题标题】:how to properly join and query to achieve comparison如何正确join和query实现比较
【发布时间】:2013-04-19 15:54:57
【问题描述】:

我有 2 个表(OITM 和 artfileStatus)。我想加入他们OITM.ItemCode = artfileStatus.artfilename + ‘.pdf’

我想查询 OITM 表以返回该表中所有 OITM.ItemCodes 的列表。作为附加专栏,我想找出artfileStatus.artfilename + ‘.pdf’中不存在哪些OITM.ItemCodes

如果(artfileStatus.artfilename + ‘.pdf’ ) 不存在,我想返回文本“无艺术品”。如果(artfileStatus.artfilename + ‘.pdf’ ) 确实存在,我想返回(artfileStatus.filelocation) 的值。

我不确定要使用的正确连接和/或查询此连接的正确方法。我确定 CASE 参与了 select 语句,但我发现当 artfileStatus.artfilename + ‘.pdf’ 不存在时,我的查询尝试根本没有返回任何结果。

您能否帮我指明正确的方向或根据此信息提供示例解决方案?非常感谢!

【问题讨论】:

  • 你尝试的查询是什么?
  • 这是从更复杂的查询中减少的,但希望与我要求的更简单的版本相匹配,但这是我尝试过的:SELECT DISTINCT T0.[ItemCode], CASE WHEN t4.artfilename is null THEN 'No艺术品' ELSE t4.filelocation END as 'File Status' FROM OITM T0 inner join UFD1 t1 on t0.U_status = t1.fldvalue and t1.tableid = 'oitm' and t1.fieldid = 13 INNER JOIN artfileStatus T4 on t0 .itemcode + '.pdf' = t4.artfilename WHERE t0.U_Status between '09' and '18' Group by T0.ItemCode, t4.artfilename
  • 如果你做一个内连接,你只会得到匹配的记录。如果您进行左外连接,则将使用左表中的所有行,当在右表中找不到匹配项时,将使用空行,因此我的(现在已删除)和其他答案都使用左加入。

标签: sql sql-server join case


【解决方案1】:

试试这个:

SELECT ItemCode,
       CASE WHEN artfilename IS NULL
       THEN 'NoArtwork'
       ELSE fileLocation
       END
FROM OITM
LEFT OUTER JOIN  artfileStatus ON OITM.ItemCode = SUBSTRING(artfileStatus.artfilename , 1, 6)

【讨论】:

  • 当我尝试这个查询时,我得到了错误:1)。 [SQL Server] ''' 附近的语法不正确。所以我将最后一部分更改为“.pdf”,它允许查询运行。然而,虽然这确实返回 OITM 中的每个 ItemCode(如我所愿),但它错误地为每个项目返回“NoArtwork”。请注意 OITM 中的 ItemCode 看起来像这样“102-13”,而在 artfileStatus 表中看起来像这样“102-13.pdf”
  • 您可以在艺术文件状态上使用子字符串来获取没有 pdf 的字符串。我更新了我的代码,我认为状态将始终包含 6 个字符。
猜你喜欢
  • 1970-01-01
  • 2021-11-03
  • 2021-01-28
  • 2015-03-26
  • 2011-12-13
  • 2023-02-11
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
相关资源
最近更新 更多