В SQL Server 2008, у меня есть таблица, которая выглядит следующим образом:SQL Group и присоединиться
ID | RefNum | Label | Value | Status
------------------------------------------------------
1 123 OrderNum 123456 0
2 123 TrackingNum 111111 0
3 123 ConfNum 989898 0
4 234 OrderNum 234567 1
5 234 TrackingNum 222222 1
6 234 ConfNum 878787 0
7 567 OrderNum 345678 1
8 567 TrackingNum 333333 0
9 567 ConfNum 767676 0
Я хочу, чтобы выбрать все записи, где Status = 0 и Join, основанные на RefNum, к 'OrderNum' и значения меток «TrackingNum», независимо от того, является ли «OrderNum» и TrackingNum статусы 1 или 0. Например, запрос должен производить:
ID | RefNum | Label | Value | Status |OrderNum|TrackingNum
------------------------------------------------------------------------
1 123 OrderNum 123456 0 123456 111111
2 123 TrackingNum 111111 0 123456 111111
3 123 ConfNum 989898 0 123456 111111
6 234 ConfNum 878787 0 234567 222222
8 567 TrackingNum 333333 0 345678 333333
9 567 ConfNum 767676 0 345678 333333
Сейчас мой запрос выглядит следующим образом:
SELECT Id
,mT.RefNum
,Label
,Value
,Status
,OrderNum
,TrackingNum
FROM [dbo].[myTable] AS mT
INNER JOIN (
SELECT MAX(ID) As OrderRowId, RefNum, Value AS OrderNum
FROM [dbo].[myTable]
WHERE Label= 'OrderNum'
group by RefNum, Value) AS OrderNums
ON OrderNums.RefNum= mt.RefNum
INNER JOIN (
SELECT MAX(ID) As OrderRowId, RefNum, Value AS TrackingNum
FROM [dbo].[myTable]
WHERE Label= 'TrackingNum'
group by RefNum, Value) AS TrackingNums
ON TrackingNums.RefNum= mt.RefNum
WHERE ProcessComplete = 0
Это относится к работе, но требует хеш-соединения. Хотел бы кого-нибудь стрелять в дыры в этом или обеспечить более эффективное решение. Благодарю.
Хеш-соединения эффективны. В чем проблема? Кстати, почему бы не просто уменьшить каждый «RefNum» до одной строки с тремя элементами информации в строке? Это похоже на разумный результат для данных такого типа. –
@GordonLinoff Вы делаете отличные очки. В грандиозной схеме не очень важно иметь хеш-соединение. Мне просто интересно, может ли это поправиться. Реальная проблема заключается в том, что у меня около 25 разных лейблов, и они не всегда гарантированно будут там. Я мог бы группировать по каждой метке и refnum, но группировка и, следовательно, преобразование вывода, похоже, слишком малоинвазивно. – kakridge