Sql 在select语句中跨2个表(和3列)存在时的情况无效
大家好,你们这些了不起的SQL人 我正在将数据从实时数据库移动到临时报告数据库,很快将成为DW 我遇到了一个数据完整性问题,我正在努力解决这个问题 涉及源数据库的下表: [包装和尺寸]:包含产品信息。 [销售日记帐]:包含产品的销售情况。 它应该做什么: 如果存在[Sales Journal].[Pack Code],并且它确实存在于产品表中,则应返回[Sales Journal].[Pack Code] 如果没有[Sales Journal].[Pack Code],并且[Sales Journal].[Product Code]确实存在于产品表中,则应返回[Sales Journal].[Product Code] 如果[Packaging and Sizes]表[Packaging and Sizes].[Product Code]中不存在[Sales Journal].[Pack Code]和[Sales Journal].[Product Code],则应返回0 问题: 目前,如果产品不存在,第3点将返回[Sales Journal].[Product Code],而不是0 问题: 我在哪里犯了错误?我怎样才能得到我想要的结果? 这是我的实际代码,但所讨论的部分是CASE表达式:Sql 在select语句中跨2个表(和3列)存在时的情况无效,sql,sql-server,Sql,Sql Server,大家好,你们这些了不起的SQL人 我正在将数据从实时数据库移动到临时报告数据库,很快将成为DW 我遇到了一个数据完整性问题,我正在努力解决这个问题 涉及源数据库的下表: [包装和尺寸]:包含产品信息。 [销售日记帐]:包含产品的销售情况。 它应该做什么: 如果存在[Sales Journal].[Pack Code],并且它确实存在于产品表中,则应返回[Sales Journal].[Pack Code] 如果没有[Sales Journal].[Pack Code],并且[Sales Jour
SELECT CONVERT( CHAR(8), [Date & Time], 112) AS DateID,
CONVERT( TIME, [Date & Time]) AS [Time],
--,CASE WHEN ISNULL([Pack Code],'') = '' THEN [Product Code] ELSE [Pack Code] END AS [ProductCode] <-- Old line
CASE
WHEN ISNULL([Pack Code], '') = ''
THEN CASE
WHEN EXISTS
(
SELECT ps.[Product Code]
FROM [Packaging and Sizes] ps
WHERE [Product Code] = ps.[Product Code]
)
THEN [Product Code]
ELSE '0'
END
ELSE CASE
WHEN EXISTS
(
SELECT ps.[Product Code]
FROM [Packaging and Sizes] ps
WHERE [Pack Code] = ps.[Product Code]
)
THEN [Pack Code]
ELSE CASE
WHEN EXISTS
(
SELECT ps.[Product Code]
FROM [Packaging and Sizes] ps
WHERE [Product Code] = ps.[Product Code]
)
THEN [Product Code]
ELSE '0'
END
END
END AS [ProductCode],
[Quantity],
[Pack Size],
[Landed Cost],
[Sales Tax],
[Line Total],
[Transaction Tracking Number]
FROM [Sales Journal]
如何使用COALESCE语句,在[Packagings and size]表上有两个左连接,例如:
SELECT
COALESCE(packCode.[Product Code], prodCode.[Product Code], 0) AS [ProductCode]
FROM [Sales Journal] sj
LEFT JOIN [Packaging and Sizes] packCode ON sj.[Pack Code] = packCode.[Product Code]
LEFT JOIN [Packaging and Sizes] prodCode ON sj.[Product Code] = prodCode.[Product Code]
它可以将其与PackCode或ProductCode联接,或者如果发现其中任何一个,则返回0。这是一个case表达式,不是case语句。谢谢,修复了它。请编辑您的问题,将示例数据包括为DDL+DML、当前输出和所需输出。所需输出:100004=>0,100006=>0,60002=>0,60001=>100001,100010=>100010,60004=>100010,600100022=>600100022看起来它在工作!当我第一次尝试COALESCE时,我在[包装和尺寸]上只有一个连接,所以它不起作用。非常感谢,我会做一些检查,以确保结果是正确的,以防万一。
SELECT
COALESCE(packCode.[Product Code], prodCode.[Product Code], 0) AS [ProductCode]
FROM [Sales Journal] sj
LEFT JOIN [Packaging and Sizes] packCode ON sj.[Pack Code] = packCode.[Product Code]
LEFT JOIN [Packaging and Sizes] prodCode ON sj.[Product Code] = prodCode.[Product Code]