我不知道如何清楚地陈述我的问题,但我会尽力使用这个例子:
我有一张目前的表格:
-----------------------------------------------------
|No. | Name | Request | Sales Territory |
-----------------------------------------------------
|001 | Account 1 | NULL | PNW |
-----------------------------------------------------
|002 | Account 2 | MERGE TO 001 | PNW |
-----------------------------------------------------
|011 | Account 5 | NULL | EUROPE |
-----------------------------------------------------
|500 | Account 8 | MERGE TO 011 | EUROPE |
-----------------------------------------------------
我的目标是让它看起来像这样:
{{1}}
我过去曾使用过CASE语句填写列数据,但是这个请求让我感到有点难过,因为它依赖于将RIGHT([Request],3)从表格与[No.]列相匹配,然后根据MERGE TO [编号]填充列。我有更多的专栏来填充,但认为这是我能说明问题的最简单方法。
使用MSSQL。每列都是VARCHAR(50)。
答案 0 :(得分:2)
CASE会起作用,但COALESCE会更干净地达到相同的效果。我认为问题在于您需要首先将表连接到自身,并确保将第一个表上的Request字段连接到第二个字段的No.字段。以下是基于您的问题的示例:
before_script:
- apt-get -qq update
- npm set progress=false
- npm install --silent
deploy:
script:
- npm run deploy
- apt-get install -yqq ruby ruby-dev --silent
- gem install dpl
- dpl --provider=heroku --app=your-app-name --api-key=$HEROKU_API_KEY
only:
- master
这应该返回结果:
CREATE TABLE #tmpAccount (
[No.] VARCHAR(50)
,Name VARCHAR(50)
,Request VARCHAR(50)
,[Sales Territory] VARCHAR(50)
)
INSERT INTO #tmpAccount
VALUES ('001', 'Account 1', NULL, 'PNW')
,('002', 'Account 2', 'MERGE TO 001', NULL)
,('011', 'Account 5', NULL, 'EUROPE')
,('500', 'Account 8', 'MERGE TO 011', NULL)
SELECT tmp1.[No.]
,tmp1.Name
,tmp1.Request
,COALESCE(tmp2.[Sales Territory], tmp1.[Sales Territory]) AS [Sales Territory]
FROM #tmpAccount tmp1
left join
#tmpAccount tmp2 on RIGHT(tmp1.Request, 3) = tmp2.[No.]
DROP TABLE #tmpAccount
答案 1 :(得分:0)
根据您使用的版本,您可以使用LEAD或LAG来实现您的工作:
这些可以让您查看查询行之前和之后的行。
请使用您正在使用的SQL版本标记您的问题,这会对可能的答案产生影响。