T-SQL: переместить значения столбцов в значения строк - PullRequest
1 голос
/ 24 октября 2011

Я хочу, чтобы оператор case (или тот, который вы предлагаете) производил несколько результатов, и эти результаты отражаются в выходных данных.Однако, используя приведенный ниже пример, я не получаю желаемых результатов.Заранее спасибо.

В настоящее время:

ID Phase Total Hours Team1 Team2 Team3
1  Test      50       25     10    15
2  QA        60       20     20    20
3  Impl      40       0      20    20

Ищу:

ID Phase Total Hours Team Name Team Hour 
1  Test      50       Team 1      25
1  Test      50       Team 2      10
1  Test      50       Team 3      15
2  QA        60       Team 1      20
2  QA        60       Team 2      20
2  QA        60       Team 3      20
3  Impl      40       Team 2      20
3  Impl      40       Team 3      20



Select ID, Phase, Total Hours,
case
When Team1 is not null and Team1 is >0 then 'Team1'
When Team2 is not null and Team2 is >0 then 'Team2'
When Team3 is not null and Team3 is >0 then 'Team3'
end as 'Team Name',

case
When Team1.Hrs is not null and Team1.Hrs is >0 then Team1.Hrs
When Team2.Hrs is not null and Team2.Hrs is >0 then Team2.Hrs
When Team3.Hrs is not null and Team3.Hrs is >0 then Team3.Hrs
end as 'Team Hours'

From DB.DBNAME

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Используйте UNPIVOT.Например:

;WITH t AS(
SELECT * FROM (VALUES(1,'Test',50,25,10,15),(2,'QA',60,20,20,20),(3,'Impl',40,0,20,20)
              )x(ID, Phase, [Total Hours], Team1, Team2, Team3)
)
SELECT ID,Phase, [Total Hours], [Team Name], [Team Hour]
FROM t
UNPIVOT
  ([Team Hour] FOR [Team Name] IN (Team1, Team2, Team3)) AS unpvt
WHERE [Team Hour] > 0
0 голосов
/ 24 октября 2011

Безобразно, но ...

SELECT ID, Phase, [Total Hours], 'Team1' AS Team, Team1 AS [Team Hours]
FROM DB.DBNAME

UNION

SELECT ID, Phase, [Total Hours], 'Team2' AS Team, Team2 AS [Team Hours]
FROM DB.DBNAME

UNION 

SELECT ID, Phase, [Total Hours], 'Team3' AS Team, Team3 AS [Team Hours]
FROM DB.DBNAME

По какой причине вам нужно, чтобы ваш запрос возвращался подобным образом, и вы не смогли выполнить обычный запрос и перестроить данные на стороне клиента?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...