我有这种记录
project vendor value
------------------------
A HDFC 23
B HDFC 20
A HDFC 52
c CITI 56
------------------------
输出
project vendor value
---------------------------
A HDFC 23
- - 52
B - 20
c CITI 56
---------------------------
答案 0 :(得分:0)
您没有指定DBMS,因此这是标准的ANSI SQL:
select project,
case
when row_number() over (partition by vendor order by project) = 1 then vendor
else '-'
end as vendor,
value
from the_table
order by project, row_number() over (partition by vendor order by project);
SQLFiddle:http://sqlfiddle.com/#!15/f77b0/1
答案 1 :(得分:0)
试试这个:
SELECT *, ROW_NUMBER() OVER (ORDER BY project, vendor) SNo
INTO #ordered
FROM YourTable
UPDATE o
SET o.project = CASE WHEN last.project = o.project THEN '-' ELSE o.project END, o.vendor = CASE WHEN last.vendor = o.vendor THEN '-' ELSE o.vendor END
FROM #ordered o
LEFT OUTER JOIN #ordered last ON last.SNo = o.SNo - 1
SELECT project, vendor, value
FROM #ordered
答案 2 :(得分:0)
above answer的一个小变化,以接近预期的输出
select project,
case when row_number() over (partition by project) = 1 then project
else '-'
end as new_project,
case when row_number() over (partition by vendor order by project) = 1 then vendor
else '-'
end as vendor,
value
from projects
order by project, row_number() over (partition by vendor order by project);
project new_project vendor value
A A HDFC 23
A - - 52
B B - 20
c c CITI 56
答案 3 :(得分:0)
使用第一个答案我认为我们应该在项目列中添加相同的逻辑与原始问题完全匹配:
select
case
when row_number() over (partition by project) = 1 then project
else '-'
end as project,
case
when row_number() over (partition by vendor order by project) = 1 then vendor
else '-'
end as vendor,
value
from projects
order by row_number() over (partition by vendor)
答案 4 :(得分:0)
在MS SQL中:
select project,vendor,value from (
select
row_number() over (partition by vendor order by project) as number,
case
when row_number() over (partition by project order by vendor) = 1 then project
else '-'
end as project,
case
when row_number() over (partition by vendor order by project) = 1 then vendor
else '-'
end as vendor,
value
from [Vendors]
) as S
order by number
它就像你想要的那样工作!