2015-01-20 1 views
-1

Я начну прямо, объяснив пример. Предположим, у меня есть таблица, которая имеет 3 столбца, как показано.Запрос SQL Server для получения одного значения из каждого столбца в один столбец

enter image description here

Теперь то, что я пытаюсь достичь, я хочу первые значения каждого отдельного столбца в одну колонку. Так что это будет что-то вроде этого,

enter image description here

Я попробовал несколько запросов здесь в том числе с использованием TOP 1 и другими неправильными способами. Но я все еще ничего не вижу, чтобы добиться точного результата.

Нужно руководствоваться здесь, как достичь этого. Спасибо.

+0

Вы хотите какой-либо конкретный ряд? –

+0

Вот ссылка, которая может помочь вам использовать 'UnPivot' http://stackoverflow.com/questions/18026236/sql-server-columns-to-rows –

+0

@KrishKvR - Конкретно это не обязательная вещь. Я был бы в порядке с одной строкой или 500 рядами. Но я хочу получить значения строки в одном столбце. –

ответ

2

ОБРАЗЦА ТАБЛИЦА

SELECT * INTO #TEMP 
FROM 
(
    SELECT 1 BATCH_ID,'AAA' ASSIGNMENTTITLE,'FILE' ASSIGNMENTTYPE 
    UNION ALL 
    SELECT 1,'AAA1','FILE' 
    UNION ALL 
    SELECT 1,'AAA','FILE' 
)TAB 

Если вам нужен второй ряд специально вам можно сделать ниже

QUERY

;WITH CTE AS 
(
    -- Order row according to default format 
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT(0))) RNO,* 
    FROM #TEMP 
) 
SELECT CAST(BATCH_ID AS VARCHAR(20)) FROM CTE WHERE RNO=2 
UNION ALL 
SELECT ASSIGNMENTTITLE FROM CTE WHERE RNO=2 
UNION ALL 
SELECT ASSIGNMENTTYPE FROM CTE WHERE RNO=2 
  • Click here для просмотра результат

ОБНОВЛЕНИЕ

Поскольку существует 3 пунктов в каждой записи, он может быть озадачен, если и иное не столбец для каждого из элементов в записи.

;WITH CTE AS 
(
    -- Order row according to default format 
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT(0))) RNO,* 
    FROM #TEMP 
) 
SELECT CAST(BATCH_ID AS VARCHAR(20)),RNO 
FROM CTE 
UNION ALL 
SELECT ASSIGNMENTTITLE,RNO 
FROM CTE 
UNION ALL 
SELECT ASSIGNMENTTYPE,RNO 
FROM CTE 
ORDER BY RNO 
  • Click here для просмотра результат
+0

Я обновил.Пожалуйста, проверьте сейчас @HarveySpecter –

+0

Ну, мне просто удалось изменить свое требование. Но, тем не менее, я буду принимать это как ответ, потому что, если бы я это сделал, это помогло бы. –

0

Вы можете использовать функцию CONCAT(), чтобы создать столбец, состоящий из всех требуемых значений

More info here

+0

Что ??????????? – sqluser

+0

Это не помогает. Спасибо за ответ, хотя. –

0

Просто вы можете попробовать это. Если хотите, чтобы конкретная строка использовала rowid. Для всех столбцов используйте UNPIVOT

create table #temp(id int, name varchar(100), title varchar(100)) 
insert into #temp values(1,'aaa','file') 
insert into #temp values(1,'aaas','filef') 
insert into #temp values(1,'aaaww','filefs') 

select * from #temp 
select top 1 cast(id as varchar) title from #temp 
union 
select top 1 name from #temp 
union 
select top 1 title from #temp 

drop table #temp 
0

Это может помочь вам

select top 1 convert(varchar(10), batch_id) ASSIGNMENTTITLE from table 
union all 
select top 1 ASSIGNMENTTITLE from table 
union all 
select top 1 ASSIGNMENTTYPE from table 
0

Если это действительно то, что вы хотите: «Я хочу, чтобы первые значения каждого отдельного столбца в одну колонку» было бы:

select ASSIGNMENTTITLE 
from (
select min(convert(varchar(10), batch_id)) ASSIGNMENTTITLE, 
1 ColOrder from table 
union all 
select min(ASSIGNMENTTITLE), 
2 ColOrder from table 
union all 
select min(ASSIGNMENTTYPE), 
3 ColOrder from table 
) as data 
order by ColOrder