2017-09-01 33 views
0

自动产生的id我有两个表:由活动和简单的活动:两个表中的工会

composed_activities

id | name  
1 | Activity 1  
5 | Activity 2 

simple_activities

id | name  
1 | S Activity 1  
2 | S Activity 2  
3 | S Activity 3 

我需要一个查询返回一个新生成的id,带有'+'前缀和简化的组合活动Ë那些与“ - ”前缀:

id | name 

1 | + Activity 1  
2 | + Activity 5  
3 | - S Activity 1  
4 | - S Activity 2  
5 | - S Activity 3 

到目前为止,我只设法加入这两个表,但不会自动生成一个ID:

SELECT id, CONCAT('- ',name) as name 
FROM simple_activities 
UNION 
SELECT id,CONCAT('+ ',name) AS name 
FROM composed_activities 

有人能告诉我如何生成的ID?提前致谢。

+1

选择名称,ROW_NUMBER()以上(按名称排序)作为ID – Serg

回答

3

总结你联合成一个子查询,然后使用ROW_NUMBER()窗函数生成您的ID:

SELECT 
    ROW_NUMBER() OVER (ORDER BY name ASC) as newid, 
    id as oldid, 
    name 
FROM 
    (SELECT 
     id, 
     CONCAT('- ',name) as name 
    FROM simple_activities 
    UNION 
    SELECT 
     id, 
     CONCAT('+ ',name) AS name 
    FROM composed_activities) subquery 
+0

它完美地工作。谢谢! – Dayana

1

JNevill是正确的,是正确的答案,在更少的代码。

我使用CTE张贴,因为我觉得他们更容易阅读:

DECLARE @composed_activities TABLE (id int, name varchar(20)) 
INSERT INTO @composed_activities (id, name) 
VALUES (1,'Activity 1'), (5,'Activity 2') 

DECLARE @simple_activities TABLE (id int, name varchar(20)) 
INSERT INTO @simple_activities (id, name) 
VALUES (1,'S Activity 1'), (2,' S Activity 2'), (3,' S Activity 3') 

;WITH X (id, name) AS 
(
    SELECT id,'+ '+name FROM @composed_activities 
    UNION ALL 
    SELECT id,'- '+name FROM @simple_activities 
), Y AS 
    (
     SELECT ROW_NUMBER() OVER(ORDER BY name,id) AS id, name 
     FROM X 
    ) 

SELECT * 
FROM Y 
+0

我试过这段代码,它也起作用了。谢谢回复! – Dayana