T-SQL Help - Функция Pivot Like для объединения некоторых данных - PullRequest
0 голосов
/ 01 июня 2011

У меня вопрос к T-SQL, обычно SQL - моя сильная сторона, но по какой-то причине я нахожусь в тупике.Итак, вот и все.

У меня есть таблица следующего формата:

CREATE TABLE [tmp_LoadDataWithAutoID](
    [DataID] int PRIMARY KEY IDENTITY(1,1),
    [SiteType] [varchar](800) NULL,
    [RegionId] [varchar](800) NULL,
    [RegionName] [varchar](800) NULL,
    [Site] [varchar](800) NULL,
    [SiteName] [varchar](800) NULL,
    [PluCode] [varchar](800) NULL,
    [Quantity] [varchar](800) NULL,
    [SalesValue] [varchar](800) NULL,
) ON [PRIMARY]

Это загружается из TXT Fule с использованием BCP.

Th проблема сфайл заключается в том, что информация о хранилище дана не в каждой строке, и каждая запись не сообщает мне, что это за информация о хранилище, просто в строке выше автоматически содержится информация.

1   F   2 OR    AUCKLAND 100021 KAITAIA 1   1   11.95   SHH LIMITED 2038    1688    732
2                       10  626.95  4620.16 
3                       2   71278.466   121049.29   NULL
4                       2807    12  -3.48   NULL
5                       29470000105 68  217.6

Я выполнил запрос на запуск, который получает информацию о хранилище, имеющуюся у меня, с его идентификатором данных

 DataID SiteType    RegionId    RegionName  SiteSite    SiteName    PluCode Quantity    SalesincGST Dealer  FuelOnly    ShopOnly    Both
1   F   2 OR    AUCKLAND    100021  KAITAIA 1   1   11.95   SHIRBERT LIMITED    2038    1688    732
628 F   2 OR    AUCKLAND    100062  KAIKOHE 2   78382.017   130780.28   STAGE 3 LIMITED 4097    1761    1159
1301    F   2 OR    AUCKLAND    100074  PAIHIA  2   51332.505   86250.69    STAGE 3 LIMITED 1860    996 709
1859    F   7 OR    BAY OF PLENTY/CENTRAL PLATEAU   101232  OPOTIKI 2   28869.128   48474.4 D & L INVESTMENTS LIMITED   1660    1558    606

Итак, у меня есть эти идентификаторы с 1 по 627, 628 - 1301 и 1302 - 1858.

Вопрос в том, как iIpivot и присоединить эту таблицу обратно к себе, чтобы определить минимальный и максимальный значения DataID для каждого магазина?

*** РЕДАКТИРОВАТЬ ****

Чтобы сделатьпроще описать меньшее подмножество таблицы.

DataID  SiteSite    SiteName
1   100021  STORE KAITAIA
628 100062  STORE KAIKOHE
1301    100074  STORE PAIHIA
1859    101232  STORE OPOTIKI
2383    101250  STORE TE KUMI
3135    101359  STORE MIDWAY
4055    101381  STORE WAIROA
4988    101429  STORE TARADALE
5540    101448  STORE TAMATEA
6062    101460  STORE HAVELOCK NORTH
6556    101481  STORE KARAMU ROAD
6971    101500  STORE PARKVALE
7423    101605  STORE SEAVIEW ROAD
7812    101624  STORE MERRILANDS
8334    101646  STORE INGLEWOOD

Мне нужно создать запрос, который инвертирует таблицу примерно так:

SiteSite,  SiteName,           MinDataID, MaxDataID
100021     STORE KAITAIA       1           627
100062     STORE KAIKOHE       628         1300
100074     STORE PAIHIA        1301        1858 

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Как только у вас есть Информация о сайте для каждой строки.Вы можете использовать приведенный ниже запрос для получения минимального и максимального идентификатора данных для каждого магазина.

Первая часть для включения номеров строк

Select ROW_NUMBER() Over(Order by dataId) as RowNo, * into #temp1 from [tmp_LoadDataWithAutoID]

Второйчасть получит минимальный dataid

Select Min(dataid) as [MinDataID]
into #temp2 From [tmp_LoadDataWithAutoID]
Group By Site 

Здесь вы можете получить минимальный и максимальный DataId

Select t2.[MinDataID] MinDataID, 
(Case When 
    (Select DataID - 1 from #temp1 Where RowNo = t1.RowNo + 1) is Null Then t2.[MinDataID] 
Else 
    (Select DataID - 1 from #temp1 Where RowNo = t1.RowNo + 1) 
End) MaxDataID
From #temp1 t1
Inner Join #temp2 t2 on t1.DataID = t2.[MinDataID]

Наконец, удалите временные таблицы

drop table #temp1
drop table #temp2
0 голосов
/ 01 июня 2011

Наконец-то, Спасибо за просмотр, хотя.

Ответ был:

SELECT DISTINCT DMRA.SiteSite, DMRA.SiteName, MaxDataID = DMRA.DataID, MinDataID =( MIN(DMRB.DataID))
FROM #tmp_DataMarketRecords DMRA
LEFT JOIN #tmp_DataMarketRecords DMRB ON  DMRA.DataID < DMRB.DataID
GROUP BY DMRA.DataID, DMRA.SiteSite, DMRA.SiteName
ORDER BY MaxDataID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...