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 |
+------------------+----------------+-----------+--------------------+