我有这张桌子:
|----fruit----|
|-------------|
|--Apples--|
|--Apples--|
|--Apples--|
|--Apples--|
|-bananas-|
|-bananas-|
|-oranges-|
|--plums---|
|--plums---|
我有以下脚本:
case when
[fruit] = [fruit] then '0'
else [fruit]
end
我想要做的是返回两列。 1是水果柱,第2个是柱子,显示水果柱何时变为下一个水果,所以我有以下内容: -
|----fruit----||fruit change|
|-------------||----------------|
|--Apples--||-------0-------|
|--Apples--||-------0-------|
|--Apples--||-------0-------|
|--Apples--||-------0-------|
|-bananas-||--bananas--|
|-bananas-||-------0-------|
|-oranges-||---oranges---|
|--plums---||----plums----|
|--plums---||-------0-------|
|--plums---||-------0-------|
|--plums---||-------0-------|
|--plums---||-------0-------|
|--mango---||---mango---|
|--mango---||-------0-------|
如何返回与水果变化相对应的列,因为上面的脚本不允许我指定我需要它做什么。
答案 0 :(得分:1)
您可以使用以下延迟:
Select fruit,case when fruit <> lag(fruit) over(order by id) then fruit else '0' end as fruitChange
from #data
输出如下:
+---------+-------------+
| fruit | fruitChange |
+---------+-------------+
| Apples | 0 |
| Apples | 0 |
| Apples | 0 |
| Apples | 0 |
| bananas | bananas |
| bananas | 0 |
| oranges | oranges |
| plums | plums |
| plums | 0 |
+---------+-------------+
答案 1 :(得分:0)
版本,第一行显示水果,而不是0。
-- create table
create table #data (id int identity(1,1), fruit nvarchar(20))
go
-- insert
insert into #data
values ('apple'),('apple'),('apple'),('ban'),('ban'),('orange'),('orange'),('orange'),('orange'),('lime'),('lime'),('lime'),('lime'), ('steak')
go
-- select, note first row will give you fruit as well
Select *,
case when fruit <> lag(fruit) over(order by id)
or lag(fruit) over(order by id) is null then fruit
else '0'
end as value
from #data
输出:
id fruit value
1 apple apple
2 apple 0
3 apple 0
4 ban ban
5 ban 0
6 orange orange
7 orange 0
8 orange 0
9 orange 0
10 lime lime
11 lime 0
12 lime 0
13 lime 0
14 steak steak