我有以下SQL语句:
SELECT a.Data ,
a.DataID ,
b.ParentDataID
FROM table1 a
LEFT OUTER JOIN table2 b ON a.DataID = b.ID
例如,结果集的第一行看起来像“a.DataID = 1,a.Data = Cat,b.ParentDataID = 0”;在结果集的下一行中,“a.DataID = 2,a.Data = Dog,b.ParentDataID = 1”。
我想要做的是显示名为“PreviousData”的第4列或b.ParentDataID = 0时它将是空字符串的任何位置,但是如果b.ParentDataID具有等于某些DataID的值(在这种情况下) 1),然后它看起来像:
a.DataID = 2,a.Data = Dog,b.ParentDataID = 1,PreviousData = Cat
如果有可能,我该如何做呢?
答案 0 :(得分:2)
您正在寻找的是自我加入和CTE(通用表格表达)
With MyView As (
SELECT
a.Data ,
a.DataID ,
b.ParentDataID
FROM table1 a
LEFT OUTER JOIN table2 b ON a.DataID = b.ID
)
SELECT a.DataID,
a.Data,
b.ParentDataId,
Parent.Data
From MyView
as Parent
LEFT Join MyView as Child on Parent.DataId = Child.ParentDataId
注意:由于我没有SQL管理工作室,可能会出现一些语法错误。
答案 1 :(得分:1)
使用LEAD和LAG,这是一个例子:
SELECT
LAG(p.FirstName) OVER (ORDER BY p.BusinessEntityID) PreviousValue,
p.FirstName,
LEAD(p.FirstName) OVER (ORDER BY p.BusinessEntityID) NextValue
FROM Person.Person p
答案 2 :(得分:0)
使用LAG功能:
select dataid, data , lag(dataid,1,0) over (order by dataid) as parentdataid,
lag(data,1,0) over (over by dataid) as parentdata
from table