Sql server 2008 T-SQL帮助-类似Pivot的函数,用于合并某些数据
我有一个T-SQL问题要问,通常SQL是我的强项,但出于某种原因,我在以下几点上被难住了。就这样 我有一张表格,格式如下:Sql server 2008 T-SQL帮助-类似Pivot的函数,用于合并某些数据,sql-server-2008,tsql,pivot,Sql Server 2008,Tsql,Pivot,我有一个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) N
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]
这是使用BCP从TXT Fule加载的
该文件的问题在于,并非每一行都给出了存储信息,而且每条记录都没有告诉我存储信息是什么,它只是自动地在上面包含信息的那一行中
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
所以我所做的就是运行一个查询,它获取我用它的
数据标识
我有从1号到627号,628-1301号和1302-1858号的身份证
问题是,iIpivot如何将这个表重新连接到它自己,从而计算出每个存储的最小和最大数据ID是多少
***编辑****
为了使它更容易,我将描述一个较小的表子集
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
一旦您有了每行的站点信息。您可以使用下面的查询来获取每个存储的最小和最大数据ID
第一部分包含行编号
第二部分将获得最小数据ID
在这里可以获得最小和最大数据ID
最后,删除临时表
终于解决了,,
谢谢你看了
答案是:
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
你的意思是你有第一家商店的信息,也就是说,从1-627。2-627中的行没有足够的数据来说明它们属于哪个存储?是的,如果上面的请求没有意义,请道歉。还有一件事,行中的哪个字段描述它属于存储1?我的意思是,正如您所说,数据ID为1-627的行属于Store 1,您如何了解它?我不太确定我是否了解,我认为这部分是因为您的数据样本看起来有点混乱。它们似乎包含了很多表格,这可能是原因。您可以通过删除一些不相关的列来稍微整理它们—您可以使用省略号来代替,并将其余的列与空格(而不是选项卡)对齐—效果更好。列SiteSite是一个描述实际SiteID的列,但我确实需要为表中每个不同的站点构建一个“收件人和发件人”表。很抱歉,我试图执行您的查询。它显示了错误的max id,并且在最后一条记录中为max id显示了null。它在max data id中显示了错误的数据,在max data id的最后一条记录中为null
Select ROW_NUMBER() Over(Order by dataId) as RowNo, * into #temp1 from [tmp_LoadDataWithAutoID]
Select Min(dataid) as [MinDataID]
into #temp2 From [tmp_LoadDataWithAutoID]
Group By Site
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
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