在前一行的sql或t-sql中连接

时间:2013-02-01 01:22:18

标签: sql tsql concatenation

我在这里遇到了一些麻烦。我在表格中有以下数据。

(Input)  (Output) (Status)
YELLOW   YELLOW   YELLO-YELLOW     - because there is no previous row. Please watch the next
Red       GREEN   YELLOW,RED-YELLOW-GREEN

..基本上我需要一个存储过程或从表记录中获取前一行的方法并将其添加到下一行。过去几天我一直在努力做到这一点,没有任何运气。请帮忙。谢谢。

到目前为止,我有这个:

select input, output, concat(input,output) as status from Status

但是我无法连接现有的行。在我的例子中,如果Input是YELLOW而Output是YELLOw,我得到Status字段YELLOW-YELLOW的第一行。但是在下一个记录中,如果我输入为RED而输出为绿色,在这种情况下,我应该有状态黄色,红色 - 黄色,绿色。

基本上我需要找到一种方法来获取Input字段和Output字段的previus记录,并将其添加到下一条记录。

1 个答案:

答案 0 :(得分:0)

说实话,不是100%肯定你在寻找你的问题。但如果我理解正确,你想从前一行获取输入/输出并将其添加到当前行的状态?

这样的事情可以帮助你开始,具体取决于你的RDBMS - 这是特定于SQL Server的:

WITH cte AS
(
   SELECT *,
      ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS row
   FROM yourTable
)
SELECT 
  t1.input, 
  t1.output, 
  CASE 
    WHEN t2.input IS NULL
      THEN t1.input + '-' + t1.output
    ELSE 
      t2.input + ',' + t1.input + '-' + t2.output + ',' + t1.output
  END status
FROM cte t1
  LEFT JOIN cte t2 ON t1.row = t2.row+1

以下是用于测试的SQL Fiddle

祝你好运。