2016-01-20 3 views
1

Хорошо, я попытался найти ответ на этот вопрос, и я просто не могу его найти. Я использую SQL Server 2012. Я тяну данные, которые будут собираться в плоский файл. В начале и конце плоского файла мне нужен верхний и нижний колонтитулы с конкретными данными. Моя проблема возникает в нижнем колонтитуле, поскольку мне нужно количество строк из набора данных. Прямо сейчас у меня есть мой запрос, настроенный как таковой. Это упрощено, чтобы просто попытаться получить номер строки.Подсчитайте строки из отдельного запроса

select 'header' 
union 
select mytable.data 
from mytable 
union 
select 'footer'+convert(varchar(4),ROWCOUNT) 

Так что запрос работает, как это необходимо для целей плоского файла Я просто должен заполнить ROWCOUNT с номерами строк от mytable.data.

ожидается выход

Header|04||160119|||2.0|160119|| 
D|||||... 
D|||||... 
Footer|ROWCOUNT||blank|| 

UPDATE: Так написал код как таковой

select 'header' 
union all 
select mytable.data 
from mytable 
union all 
select 'footer'+convert(varchar(4),@@Rowcount) 

И он начал работать. Не совсем понятно, почему @@ Rowcount начал работать сейчас, когда это было не раньше, но теперь это работает. Спасибо всем за то, что помогли мне справиться с этим.

+0

Я добавил, что ожидаемый выход –

ответ

1

Вы также можете попробовать это с помощью CTE -

;With dataCTE 
AS 
(
    select data, COUNT(*) over() as RowCnt 
    from mytable 
), 
footerCTE 
AS 
(
    select 'footer'+convert(varchar(4),RowCnt) as data from dataCTE 
) 
select 'header' AS data 
union 
select data from dataCTE 
union 
select data from footerCTE 
+0

Я пробовал этот метод. Используя просто union, мне нужны все данные, которые мне нужны, но заголовок не остается на вершине. Если я делаю объединение, весь заголовок остается наверху, но нижний колонтитул дублируется 125 раз –

0

Вы можете попробовать, как показано ниже

 with cte 
    as 
    (select 'header' as h 
union 
select mytable.data as h 
from mytable 
    ) 
    select * from cte 
    select 'footer'+convert(varchar(4),@@ROWCOUNT) 
+0

получил эту ошибку Msg 8155, уровень 16, состояние 2, строка 2 Для столбца 1 'cte' не указано имя столбца. –

+0

Отредактировано, мои тестовые данные содержат столбцы, но при вставке я взял ваши данные. Исправлено сейчас – TheGameiswar

+0

Так что я достал много вашего кода, чтобы попробовать когда-нибудь еще. Но левый «нижний колонтитул» + конвертировать (varchar (4), @@ ROWCOUNT) И внезапно он начал работать. Как я тоже этого хотел ... Я совсем не уверен, почему @@ Rowcount не работал до –

2

Ваш запрос будет выглядеть следующим образом:

select 'header' 
union 
select mytable.data 
from mytable 
union 
select 'footer '+CAST((SELECT COUNT(*) FROM mytable) AS VARCHAR(16)); 
+2

Я бы, однако, использовал UNION ALL вместо UNION. –

+0

UNION вернет четкое значение, поэтому дубликаты не будут включены в тело. Однако они будут учтены в нижнем колонтитуле –

+0

, в среднем запросе есть отдельный запуск, поэтому объединение или объединение все равно потянут те же результаты. Союз просто добавляет верхний и нижний колонтитулы –

Смежные вопросы