我有一张看起来像这样的表。SQL Server:在同一个表中加入对方的记录
我想实现
我要选择属于一个整体的行(根据我所提供的规则)
那么我想搜索F型行有什么日期比已根据2015年
样本数据:
type docnr connection1 connection2 date
F 40195.000000 36950.000000 0.000000 2016-01-29 00:00
O 36950.000000 0.000000 40195.000000 2015-01-29 00:00
正如你看到的,行的类型决定了连接到其他的谎言。
- F型:连接到另一排位于连接2
- O型:连接到另一排位于连接1
如果我要选择所有的行属于彼此我该怎么做?
到目前为止,我已经试图创造一个自我参照表
SELECT *
FROM
(SELECT
faktoofen.datum1 as faktdatum,
faktoofen.doknr as faktdok,
ordoofen.doknr as orddok,
ordoofen.datum1 as orddatum
FROM
[FTG1].[dbo].[oof] as faktoofen,
[FTG1].[dbo].[oof] as ordoofen
WHERE
(faktoofen.doknr = ordoofen.koppl_dok2
OR ordoofen.doknr = faktoofen.koppl_dok1)
) as subq1
WHERE
YEAR(subq1.orddatum) = '2015'
AND YEAR(subq1.faktdatum) = '2016'
这似乎有点笨拙,我能感觉到一个联盟将在这里工作,但我看不出。
O类型行具有2016年发生? (<2016-01-01) –
[不良习惯踢:使用旧式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick- using-old-style-joins.aspx) - 在ANSI-** 92 ** SQL标准中,旧式*逗号分隔的表*样式列表已替换为* proper * ANSI'JOIN'语法超过20年前**),其使用不鼓励 –