Есть ли способ разделить результаты запроса в SQL Server Management Studio (SSMS)?

#sql #sql-server #ssms

#sql #sql-server #ssms

Вопрос:

Я получил простой запрос, который возвращает результаты из OrderLine таблицы. Есть ли способ визуально разделить результаты запроса, чтобы их было легче читать, как на изображении, показанном здесь?

 SELECT [OrderNo], [LineNo] 
FROM [OrderLine]
  

Результаты:

Результаты запроса

Комментарии:

1. Запросы не предназначены для отображения … используйте какой-нибудь интерфейс, Excel или другой, чтобы сделать ваши данные красивыми.

2. Мне не нужен интерфейс или пользовательский интерфейс, это только для меня, когда я разрабатываю.

3. Нет, простого и естественного способа сделать это нет. Только уродливые хаки

4. @juergend Можете ли вы поделиться с нами некоторыми из этих уродливых хаков?

Ответ №1:

 drop table if exists #OrderLine;

select object_id as OrderNo, abs(checksum(newid())) as [LineNo]
into #OrderLine
from sys.columns;

-- ... results to text (ctrl T)?
select OrderNo, [LineNo], 
case when lead(OrderNo, 1) over(partition by OrderNo order by OrderNo) = OrderNo then '' else replicate('-', 11)   char(10) end
from #OrderLine;

--inject NULL
select case when [LineNo] is null and flag=2 then null else TheOrderNo end as OrderNo, [LineNo]
from
(
    select OrderNo AS TheOrderNo, [LineNo], 1 as flag
    from #OrderLine
    union all
    select distinct OrderNo, NULL, 2
    from #OrderLine
) as src
order by TheOrderNo, flag;
  

Ответ №2:

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

 DECLARE @i int = 1
DECLARE @OrderNo
DECLARE @OrderNos TABLE (
    Idx smallint Primary Key IDENTITY(1,1)
    , OrderNo int
)

INSERT @OrderNos
SELECT distinct [OrderNo] FROM [OrderLine]

WHILE (@i <= (SELECT MAX(idx) FROM @employee_table))
BEGIN

    SET @OrderNo = (SELECT [OrderNo] FROM [OrderNos] WHERE [Idx] = @i)

    SELECT [OrderNo], [LineNo] 
    FROM [OrderLine]
    WHERE [OrderNo] = @OrderNo

    SET @i = @i   1

END
  

Комментарии:

1. это работает, спасибо, не забудьте добавить set @i = @i 1; перед завершением

Ответ №3:

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

 select ..., case when rank() over (order by OrderNO) % 2 then 'XXX' else null end 
from....
  

% 2 — это оператор ‘modulo’…