比较 table 的分区并在 TSQL 中为唯一分区创建索引(如果可能的话)

Comparing partitions of a table and creating index for unique partition in TSQL (if it's possible)

我有一个简单的任务要做。虽然可能无法使用 TSQL.

我想根据元素的顺序比较 SQL table 的分区(例如巴士路线的停靠顺序)。这是我的 table:

ID  BusNr     Seq     StopName   Date       
1   789        1         A     2015-04-08
2   789        2         B     2015-04-08
3   789        3         C     2015-04-08
4   789        4         D     2015-04-08
5   789        1         A     2015-04-16
6   789        2         B     2015-04-16
7   789        3         D     2015-04-16
8   789        1         A     2015-05-10
9   789        2         B     2015-05-10
10  789        3         C     2015-05-10
11  789        4         D     2015-05-10
12  789        5         E     2015-05-10

示例显示了一条公交线路,它在三个不同的日期采用不同的路线。路线由停止序列给出。我需要的是找到一种方法来引用路线的停靠顺序,并为每条公交线路找到唯一的停靠顺序。然后我想创建一个 table 的唯一停止序列(每个都有索引),我可以连接到上面的 table。

是否可以根据此类序列的标识执行连接?

请给我任何建议来解决我的问题。我想知道我是否可以使用 window 功能,但目前我没有找到解决方案。

[评论太少] 我很想帮忙,但我不清楚你的 objective。 我明白了: 路线是唯一的停靠点列表。 不同的日子有不同的路线。 我想要每条公交线路的不同路线。

Maybe you want this:
1. 789 ABC, 
2. 789 ABD, 
3. 789 ABCDE

加入时,您需要另一条信息来使其独一无二,因为 BusLine 上存在 3 个可能的匹配项,以便与日期联系起来……您可以计算出第 1 周、第 2cnd 周……做你同意吗?

如果是这样,您需要决定是要在每条路线中使用 1 行,还是将其拆分为:

 PK INT, BusNr INT, RouteStopSeq INT, RouteStopName CHAR, RouteWeekNumber INT
 1, 789, 1, A, 1
 2, 789, 2, B, 1
 3, 789, 3, C, 1
 4, 789, 1, A, 2
 5, 789, 2, B, 2
 6, 789, 3, D, 2
 ...

SO...每天都有不同的路线使得 table 您想要创建的数据与您提供的数据相同...很难从如此小的集合中看出整体模式。

    CREATE TABLE TempDB.dbo.Data 
   (
   ID INT,
   BusNr INT,
   Seq INT,
   StopName CHAR(1),
   Date DATETIME       
   )
   INSERT INTO TempDB.dbo.Data VALUES
   ( 1,789,1,'A','2015-04-08'),
   ( 2,789,2,'B','2015-04-08'),
   ( 3,789,3,'C','2015-04-08'),
   ( 4,789,4,'D','2015-04-08'),
   ( 5,789,1,'A','2015-04-16'),
   ( 6,789,2,'B','2015-04-16'),
   ( 7,789,3,'D','2015-04-16'),
   ( 8,789,1,'A','2015-05-10'),
   ( 9,789,2,'B','2015-05-10'),
   (10,789,3,'C','2015-05-10'),
   (11,789,4,'D','2015-05-10'),
   (12,789,5,'E','2015-05-10')

   CREATE FUNCTION fnConcatenateStopNames (@BusNr INT, @Date DATETIME)
   RETURNS VARCHAR(MAX)
   AS 
   BEGIN
DECLARE @RouteStopList VARCHAR(MAX) = ''

SELECT @RouteStopList = @RouteStopList + ',' + CONVERT(VARCHAR(10),StopName)
FROM TempDB.dbo.Data D
WHERE D.BusNr = @BusNr
AND D.Date = @Date
ORDER BY Seq

RETURN STUFF(@RouteStopList,1,1,'')
  END

   SELECT BusNr, Stops, ROW_NUMBER() OVER (ORDER BY BusNr, Stops) BusRouteNumber
   FROM (
SELECT DISTINCT D.BusNr, dbo.fnConcatenateStopNames (D.BusNr, D.Date) Stops 
FROM TempDB.dbo.Data D
   ) Data

编辑:使用提供的信息... 使用我提供的功能,针对您的全部设置,将解析一串停靠点、busnr 和日期...将您的路径数据聚合到路线计数中。

根据所有路线的总和使用路线计数,您可以确定每辆公共汽车的路线比率。

如果您将它用于我作为最后声明发布的路由列表,您也可以推断出最频繁的服务停止:)