我正在处理航空公司数据,所以我有这样的查询
SELECT Invoices.PNR, Segments.Depart, Segments.Arrival, Segments.DepartDateTime
FROM Invoices AS i INNER JOIN Segments AS s
ON i.Invoice_ID = s.Invoice_ID`
WHERE PNR = 'AAAAAA'
返回
PNR Depart Arrival DepartDateTime
AAAAAA DFW MCI 7/2/2012 7:30 AM
AAAAAA MCI LAX 7/2/2012 11:30 AM
AAAAAA LAX DFW 7/4/2012 2:30 PM
我在Invoices中有一个名为routing的列,我想要显示'DFW-MCI-LAX-DFW'这是否可以使用仅SQL方法?这些细分市场按顺序排列,因此DFW-MCI首先是MCI-LAX然后是LAX-DFW。
编辑:如果我可以用DFW-MCI-MCI-LAX-LAX-DFW更新数据库,那是完全可以接受的。我可以删除视图层上的重复条目。
我可以在ColdFusion中轻松编写这个,但循环和数以千计的数据库更新需要永远。我也可以为每100条记录进行一次批量更新,但我想避免使用除SQL以外的任何其他内容
答案 0 :(得分:1)
以下是获取价值的方法。我同意@automatic关于您是否应该使用此数据实际更新数据库。因为每次任何行都改变时你都必须重新计算它。
;WITH x AS
(
SELECT i.PNR, i.Invoice_ID, s.Depart, s.Arrival, s.DepartDateTime,
rn = ROW_NUMBER() OVER (PARTITION BY i.PNR ORDER BY s.DepartDateTime)
FROM dbo.Invoices AS i
INNER JOIN dbo.Segments AS s
ON i.Invoice_ID = s.Invoice_ID
WHERE i.PNR = 'AAAAAA'
)
SELECT x.PNR, x.Invoice_ID, Routing = (SELECT
CASE WHEN rn1 = 1 THEN Depart ELSE '' END
+ '-' + Arrival
FROM x AS x2
WHERE x.PNR = x2.PNR
AND x.Invoice_ID = x2.Invoice_ID
ORDER BY x2.DepartDateTime
FOR XML PATH('')
)
FROM x
GROUP BY x.PNR, x.Invoice_ID;