#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’…