【发布时间】:2020-01-24 13:56:01
【问题描述】:
我在使用 LEFT JOIN 超过 2 个表后生成了这个视图(简化示例)。
表格:
T1: Id, ...other columns not used
+----+-----+
| Id | ... |
+----+-----+
| 1 | ... |
| 2 | ... |
+----+-----+
T2: Id, NewId (Foreign Key from T1), Status, ...other columns not used
+-----+-------+--------+-----+
| Id | NewId | Status | ... |
+-----+-------+--------+-----+
| 1 | 1 | 1 | ... |
| 2 | 1 | 2 | ... |
| 3 | 1 | 2 | ... |
| 4 | 1 | 3 | ... |
| 5 | 1 | 1 | ... |
| 6 | 1 | 1 | ... |
| 7 | 2 | 0 | ... |
| 8 | 2 | 2 | ... |
| 9 | 2 | 1 | ... |
| 10 | 2 | 2 | ... |
+-----+-------+--------+-----+
当前视图:
SELECT
T1.Id,
T2.Status
FROM T1
LEFT JOIN T2 ON T1.Id = T2.NewId;
查看:(我到了这里)
+----+--------+
| Id | Status |
+----+--------+
| 1 | 1 |
| 1 | 2 |
| 1 | 2 |
| 1 | 3 |
| 1 | 1 |
| 1 | 1 |
| 2 | 0 |
| 2 | 2 |
| 2 | 1 |
| 2 | 2 |
+----+--------+
所需的视图需要为每个状态值(正好是 0、1、2 或 3)有单独的列。 0 和 1 保留在同一列中。
必需的视图:(但我需要这个)
+----+------------+----------+----------+
| Id | Status 0/1 | Status 2 | Status 3 |
+----+------------+----------+----------+
| 1 | 1 | 1 | 1 |
| 2 | 2 | 2 | 2 |
+----+------------+----------+----------+
我觉得我错过了一些基本的东西。 如何获得此视图?
我认为我们不需要 Rank() 的东西,而且它是对 4 个规范化表的大查询(在实践中),这就是我需要最佳解决方案的原因。 子查询与内联 SELECT 查询一起使用,但它们也需要 JOINs。生产要求有 10 列,用于计数超过 2 个单独的列。
【问题讨论】:
-
SUM(CASE WHEN Status IN (0, 1) THEN 1 ELSE 0 END) AS [Status 0/1], ...(不过,您的输入和结果目前与您的描述不符,因此尚不清楚您真正想要的是什么。) -
我在 prod 中有 4 个规范化的表,我需要加入这些表来创建第一个视图,但是,我希望在同一个查询中获得所需的视图。
标签: sql sql-server tsql group-by pivot