Это возможно, если вы используете tsql (т. Е. Microsoft SQL Server. Вы также пометили свой вопрос MySql, который является другой маркой базы данных) на сервере SQL, который поддерживает ROW_NUMBER (т. Е. Sql Server 2005 или более поздняя версия).
Я предполагаю, что ReqstDate, ConfDate и ShippedDate являются nvarchars (в противном случае было бы невозможно иметь значение '99 / 99/9999 'в этих полях).Вы должны преобразовать эти столбцы в поля даты и времени, в противном случае все предложения ORDER BY в запросе будут работать неправильно, если вы получите значение, подобное 15.01.2012 (запрос работает для заданного вами набора данных, но только потому, что все значения даты и времени находятся рядом с каждымдругой во времени, так что алфавитный порядок равен хронологическому порядку).Конечно, если вы собираетесь это сделать, вам нужно будет использовать NULL для '99 / 99/9999 'и для изменения запроса'! = '99 / 99/9999 '' на 'is null'.
Однако я бы посоветовал использовать инструмент создания отчетов или простой выбор и некоторый код для создания нужной таблицы.Запрос довольно сложный и сложный в обслуживании.Как правило, база данных предоставляет вызывающему данные, в то время как все форматирование должно выполняться самим вызывающим абонентом.
Редактировать: Ответ Микаэля Эрикссона лучше и проще, чем мой.Однако мое замечание по поводу полей даты и времени остается в силе.
select case when ROW_NUMBER() over (partition by [Order] Order by [order]) = 1
and [order] != 0
then cast([Order] as nvarchar)
else ''
end as [order],
case when ROW_NUMBER() over (partition by [order], num
Order by [order], num) = 1
and num != 0
then cast(num as nvarchar)
else ''
end as num,
case when ROW_NUMBER() over (partition by [order], num, Material
Order by [order], num, Material) = 1
then Material
else ''
end as Material,
case when ROW_NUMBER() over (partition by [order], num, Material, ReqstDate
Order by [order], num, Material, ReqstDate) = 1
and ReqstDate != '99/99/9999'
then ReqstDate
else ''
end as ReqstDate,
case when ROW_NUMBER() over (partition by [order], num, Material, ReqstDate, ReqstQty
Order by [order], num, Material, ReqstDate, ReqstQty) = 1
and ReqstQty != 0
then cast(ReqstQty as nvarchar)
else ''
end as ReqstQty,
case when ROW_NUMBER() over (partition by [order], num, Material, ReqstDate, ReqstQty, ConfDate
Order by [order], num, Material, ReqstDate, ReqstQty, ConfDate) = 1
and ConfDate != '99/99/9999'
then ConfDate
else ''
end as ConfDate,
case when ROW_NUMBER() over (partition by [order], num, Material, ReqstDate, ReqstQty, ConfDate, ConfQty
Order by [order], num, Material, ReqstDate, ReqstQty, ConfDate, ConfQty) = 1
and ConfQty != 0
then cast(ConfQty as nvarchar)
else ''
end as ConfQty,
case when ROW_NUMBER() over (partition by ShippedDate, num, Material, ReqstDate, ReqstQty, ConfDate, ConfQty, ShippedDate
Order by ShippedDate, num, Material, ReqstDate, ReqstQty, ConfDate, ConfQty, ShippedDate) = 1
and ShippedDate != '99/99/9999'
then ShippedDate
else ''
end as ShippedDate,
case when ROW_NUMBER() over (partition by [order], num, Material, ReqstDate, ReqstQty, ConfDate, ConfQty, ShippedDate, ShippedQty
Order by [order], num, Material, ReqstDate, ReqstQty, ConfDate, ConfQty, ShippedDate, ShippedQty) = 1
and ShippedQty != 0
then cast(ShippedQty as nvarchar)
else ''
end as ShippedQty
from yourTable
order by ROW_NUMBER() over (order by [order], num, Material, ReqstDate, ReqstQty, ConfDate, ConfQty, ShippedDate, ShippedQty)