2016-01-21 62 views
0

我怎样才能改变这种代码到SQL Server 2000,使其分布均匀颜色如何将此代码更改为SQL Server 2000以便均匀分配颜色?

DECLARE @Employees TABLE 
(
     Name VARCHAR(10) 
) 

INSERT INTO @Employees (Name) 
VALUES ('Sam'), ('John'), ('Jack'), ('April'), ('Sonny'), ('Jill'), ('Jane'); 

DECLARE @Colors TABLE 
(
     Name VARCHAR(10) 
) 

INSERT INTO @Colors (Name) 
VALUES ('Red'), ('Green'), ('Blue'); 

DECLARE @ColorCount INT 
SELECT @ColorCount = COUNT(*) FROM @Colors 

;WITH Employees(SNumber, Name) AS 
(
     SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS SNumber, Name 
     FROM @Employees 
    ), 
    Colors(CNumber, Name) AS 
    (
     SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS CNumber, Name 
     FROM @Colors 
    ) 

SELECT E.Name, C.Name FROM Employees E 
INNER JOIN Colors C ON 
     CASE 
     WHEN (E.SNumber % @ColorCount) = 0 
      THEN @ColorCount 
      ELSE E.SNumber % @ColorCount 
     END = C.CNUmber 

结果:

Sam - Red 
April - Red  
Jane - Red 
John - Green 
Sonny - Green 
Jack - Blue 
Jill - Blue 
+0

你确定它的SQL服务器2000? AFAIK公用表表达式仅在2005年开始...... –

+0

@ZoharPeled他期待*将此脚本转换为SQL 2000。 –

回答

0

两件事不可用SQL Server 2000中应转换:

  • ROW_NUMBER:这可以通过与IDENTITY填充CTE临时表来分配号码来完成
  • CTE:在临时表中填充CTE并在最终查询中使用它们。

你的脚本将如下所示:

DECLARE @Employees TABLE 
(
     Name VARCHAR(10) 
) 

INSERT INTO @Employees (Name) 
VALUES ('Sam'), ('John'), ('Jack'), ('April'), ('Sonny'), ('Jill'), ('Jane'); 

DECLARE @Colors TABLE 
(
     Name VARCHAR(10) 
) 

INSERT INTO @Colors (Name) 
VALUES ('Red'), ('Green'), ('Blue'); 

DECLARE @ColorCount INT 
SELECT @ColorCount = COUNT(*) FROM @Colors 

CREATE TABLE #Employees(SNumber INT IDENTITY(1,1), Name VARCHAR(10)); 
INSERT INTO #Employees(Name) SELECT Name FROM @Employees; 

CREATE TABLE #Colors(CNumber INT IDENTITY(1,1), Name VARCHAR(10)); 
INSERT INTO #Colors(Name) SELECT Name FROM @Colors; 

SELECT E.Name, C.Name FROM #Employees E 
INNER JOIN #Colors C ON 
     CASE 
     WHEN (E.SNumber % @ColorCount) = 0 
      THEN @ColorCount 
      ELSE E.SNumber % @ColorCount 
     END = C.CNUmber 

DROP TABLE #Employees; 
DROP TABLE #Colors; 
相关问题