Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在select语句中跨2个表(和3列)存在时的情况无效_Sql_Sql Server - Fatal编程技术网

Sql 在select语句中跨2个表(和3列)存在时的情况无效

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

大家好,你们这些了不起的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表达式:

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]