sql-server - SELECT 从 Parent 继承值(自引用)

标签 sql-server common-table-expression self-referencing-table

我有 02 个表 Rubrique 和 BulletinRubrique Rubrique 表包含以下列:

ID int not null,
Name, varchar(max) not null,
RubriqueA_ID int null,
RubriqueB_ID int null

以数据为例:

+-------+---------+--------------+--------------+
| ID    | Name    | RubriqueA_ID | RubriqueB_ID | 
+-------+---------+--------------+--------------+
| 1     | R1      |    2         |    3         |
| 2     | R2      |    1         |    2         |
| 3     | R3      |    NULL      |    NULL      |
| 4     | R4      |    NULL      |    6         |
| 5     | R5      |    6         |    NULL      |
| 6     | R6      |    NULL      |    1         |
+-------+---------+--------------+--------------+

RubriqueA_IDRubriqueB_ID 两列是同一张表Rubrique(自引用)的外键,它们可能为 NULL

对于表 BulletinRubrique :

ID int not null,
EmployeID int not null,
RubriqueID int not null,
Value float not null

有数据:

+-------+-----------+--------------+------------+
| ID    | EmployeID | Rubrique_ID  | Value      | 
+-------+-----------+--------------+------------+
| B1    | EMP1      | 1            | 150        |
| B1    | EMP1      | 2            | 220        |
| B1    | EMP1      | 3            | 195        |
| B1    | EMP1      | 4            | 170        |
| B1    | EMP1      | 5            | 320        |
| B1    | EMP1      | 6            | 745        |
+-------+-----------+--------------+------------+

我想做的是构建 sql 查询以获得如下结果:

+-------+-----------+--------------+------------+----------+---------+
| ID    | EmployeID | Rubrique_ID  | Value      | A_Value  | B_Value |
+-------+-----------+--------------+------------+----------+---------+
| B1    | EMP1      | 1            | 150        | 220      | 195     |
| B1    | EMP1      | 2            | 220        | 150      | 220     |
| B1    | EMP1      | 3            | 195        | NULL     | NULL    |
| B1    | EMP1      | 4            | 170        | NULL     | 745     |
| B1    | EMP1      | 5            | 320        | 745      | NULL    |
| B1    | EMP1      | 6            | 745        | NULL     | 150     |
+-------+-----------+--------------+------------+----------+---------+

请帮我建立这个查询,谢谢

最佳答案

http://rextester.com/FIJE42564是工作代码

SELECT t2.ID, t2.EmployeID, t2.RubriqueID, t2.Value, t2.A_Value, r2.Value AS B_value  FROM BulletinRubrique r2 
 RIGHT JOIN
   (
    SELECT t1.ID, t1.EmployeID, t1.RubriqueID, t1.Value, r1.VALUE AS A_VALUE, t1.B_VALUE  FROM BulletinRubrique r1 
      RIGHT JOIN ( 
        SELECT b.ID, b.EmployeID,b.RubriqueID, b.Value, r.RubriqueA_ID AS A_Value,  r.RubriqueB_ID AS B_Value
        FROM BulletinRubrique b RIGHT JOIN Rubrique r ON r.ID = b.RubriqueID ) t1 
      ON t1.A_Value =  r1.RubriqueID
   )t2 
      ON t2.B_Value =  r2.RubriqueID
      ORDER BY t2.RubriqueID

关于sql-server - SELECT 从 Parent 继承值(自引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45804971/

相关文章:

c# - 将类别父 ID 自引用表结构映射到 EF Core 实体

sql - 自引用表 SQL 查询

mysql - 为什么没有更多的 .NET 应用程序使用 MySQL 或允许使用 MySQL 的 DAO?

java - 如何在 Spring Data JPA 中使用 CTE 表达式 WITH 子句

database - INSERT 和多个 UPDATE 语句

SQL 服务器 : stored procedure using recursive CTE finding values matching a total

mysql - 在自引用查询上使用 MySQL 创建串联父列

sql-server - SQL Server 默认值是在插入之前还是之后生成的?

SQL 服务器 : aging based on last date

sql-server - context.Database.Exists 始终返回 true,即使数据库文件丢失