Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 server 左键连接一行并用单行填充空值';s值_Sql Server - Fatal编程技术网

Sql server 左键连接一行并用单行填充空值';s值

Sql server 左键连接一行并用单行填充空值';s值,sql-server,Sql Server,我有: 第一次订购服装类别中的物品: SELECT DISTINCT TOP 1 od.SalesOrderNumber, a.OrderDate, od.hasClothing FROM History a INNER JOIN OrderDetails od ON a.SalesOrderNumber=od.SalesOrderNumber WHERE od.hasClothing = 1

我有:

第一次订购服装类别中的物品:

    SELECT DISTINCT TOP 1
        od.SalesOrderNumber,
        a.OrderDate,
        od.hasClothing
    FROM History a
    INNER JOIN OrderDetails od
        ON a.SalesOrderNumber=od.SalesOrderNumber
    WHERE od.hasClothing = 1
    ORDER BY a.OrderDate ASC 

+------------------+------------+-------------+
| SalesOrderNumber | KeyDate    | hasClothing |
+------------------+------------+-------------+
| SO57673          | 2007-11-09 |           1 |
+------------------+------------+-------------+
而且

另一个查询生成:

+------------------+----------------+------------+
| SalesOrderNumber | CustomerAltKey | OrderDate  |
+------------------+----------------+------------+
| SO44063          | AW00011240     | 2005-08-30 |
| SO51205          | AW00011240     | 2007-07-03 |
| SO57673          | AW00011240     | 2007-11-09 |
| SO57953          | AW00011240     | 2007-11-14 |
+------------------+----------------+------------+
我试图将两个表连接起来并生成:

+------------------+----------------+------------+----------------------+
| SalesOrderNumber | CustomerAltKey | OrderDate  | OrderDate >= KeyDate |
+------------------+----------------+------------+----------------------+
| SO44063          | AW00011240     | 2005-08-30 |                    0 |
| SO51205          | AW00011240     | 2007-07-03 |                    0 |
| SO57673          | AW00011240     | 2007-11-09 |                    1 |
| SO57953          | AW00011240     | 2007-11-14 |                    1 |
+------------------+----------------+------------+----------------------+
我在SalesOrderNumber、OrderDate等上尝试了
左外部联接
,并尝试将空值合并到
2007-11-09
日期中。。。但我尝试过的一切都失败了。我刚刚得到:

+------------------+----------------+------------+----------------------+
| SalesOrderNumber | CustomerAltKey | OrderDate  | OrderDate >= KeyDate |
+------------------+----------------+------------+----------------------+
| SO44063          | AW00011240     | 2005-08-30 | NULL                 |
| SO51205          | AW00011240     | 2007-07-03 | NULL                 |
| SO57673          | AW00011240     | 2007-11-09 | 1                    |
| SO57953          | AW00011240     | 2007-11-14 | NULL                 |
+------------------+----------------+------------+----------------------+

有什么建议吗?这让我抓狂。

因为需要在查询结果中获取字段,所以需要使用用例语句

如果您发布表的定义,我们可以帮助您。同时,解决方案应该是这样的:

SELECT DISTINCT TOP 1
    od.SalesOrderNumber,
    a.OrderDate,
    od.hasClothing,
    CASE WHEN a.OrderDate >= od.KeyDate THEN 1 ELSE 0 END AS RESULT_FIELD_NAME
FROM History a
INNER JOIN OrderDetails od
    ON a.SalesOrderNumber=od.SalesOrderNumber
WHERE od.hasClothing = 1
ORDER BY a.OrderDate ASC 

希望能有所帮助。

基于您的示例数据,我创建了这个。但是,从示例数据来看,您似乎并不关心加入
salesfordernumber
。因此,我
交叉连接
对集合进行加密,以处理预期的输出

SELECT 
    r.SalesOrderNumber,r.CustomerAltKey,r.OrderDate,
    [OrderDate>=KeyDate]=CAST(CASE WHEN l.KeyDate<=r.OrderDate THEN 1 ELSE 0 END AS BIT)
FROM
    (
        SELECT SalesOrderNumber='SO57673',KeyDate='20071109',hasClothing=1
    ) AS l
    CROSS JOIN (
        SELECT SalesOrderNumber='SO44063',CustomerAltKey='AW00011240',OrderDate='20050830' UNION ALL
        SELECT SalesOrderNumber='SO51205',CustomerAltKey='AW00011240',OrderDate='20070703' UNION ALL
        SELECT SalesOrderNumber='SO57673',CustomerAltKey='AW00011240',OrderDate='20071109' UNION ALL
        SELECT SalesOrderNumber='SO57953',CustomerAltKey='AW00011240',OrderDate='20071114' 
    ) AS r

添加问题相关表格的结构。这将帮助我们帮助您。至少添加正在使用的所有表的候选键和列。这是理解数据所必需的关于表的基本信息。因此,您基本上忽略了连接中的SalesOrderNumber,这就是所需的输出?
+------------------+----------------+-----------+--------------------+
| SalesOrderNumber | CustomerAltKey | OrderDate | OrderDate>=KeyDate |
+------------------+----------------+-----------+--------------------+
| SO44063          | AW00011240     |  20050830 |                  0 |
| SO51205          | AW00011240     |  20070703 |                  0 |
| SO57673          | AW00011240     |  20071109 |                  1 |
| SO57953          | AW00011240     |  20071114 |                  1 |
+------------------+----------------+-----------+--------------------+