【问题标题】:TSQL CASE statement with no matching comparator没有匹配比较器的 TSQL CASE 语句
【发布时间】:2015-01-23 19:59:51
【问题描述】:

我还需要在两个数据库之间创建一个 CASE 语句,两个表之间没有相似的数据点,除了一个 varchar 字段,该字段将在标题文本中具有正确的 ID 号。这是我目前拥有的 CASE 代码。

CASE WHEN sg.lListingNumber in (SELECT c.ListingName
                                FROM CampDB.dbo.tblCampgrounds c, Visitors.dbo.VCAMPS_GLOBAL g
                                WHERE c.ListingName like '%g.lListingNumber%')
     THEN 'YES'
     ELSE 'NO'
END

如果我可以为您提供任何进一步的信息,请告诉我。

【问题讨论】:

  • 你能按照这个标准加入他们吗?
  • 可能应该是'%' + g.lListingNumber + '%'。可能是CAST(g.lListingNumber as nvarchar(max))
  • 那个子选择很奇怪。它使用的是 20 多年前被替换的古老连接语法。它似乎也与外部表(sg)没有任何关系。
  • 对不起肖恩,SG。 table 在更大的查询中引用了一个表,这只是它的一部分

标签: sql sql-server tsql case


【解决方案1】:

下面的子查询可能就是您所追求的。我将回应其他人所说的,您应该尽量避免使用相关子查询执行此操作,而是将其重写到您的主查询中,作为 tblCampgrounds 表的左连接。

我还省略了visitors.dbo.VCAMPS_GLOBAL 表,因为我看不出它与casestatement 中的子查询有什么关系

CASE
    WHEN EXISTS (
        SELECT 1
        FROM CampDB.dbo.tblCampgrounds c
        WHERE c.[ListingName] LIKE '%'  + sg.lListingNumber + '%'
    )
        THEN 1
    ELSE 0
END

【讨论】:

    猜你喜欢
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    相关资源
    最近更新 更多