在SQL server中透视两个表而不进行聚合
我在将行转换为列时遇到问题 我的结构是这样的:在SQL server中透视两个表而不进行聚合,sql,sql-server,Sql,Sql Server,我在将行转换为列时遇到问题 我的结构是这样的: SELECT [ID_KPI] ,[KPI_VALUE] FROM [dbo].[FACT_KPI] SELECT ID_KPI ,KPI_LABEL FROM [dbo].[DIM_KPI] 以及我努力实现的成果 SELECT [nb_departure] ,[nb_arrival] ,[headcount] FROM [dbo].[FACT_HR] 您可以使用CTE或派生表以及一些条
SELECT
[ID_KPI]
,[KPI_VALUE]
FROM [dbo].[FACT_KPI]
SELECT
ID_KPI
,KPI_LABEL
FROM [dbo].[DIM_KPI]
以及我努力实现的成果
SELECT
[nb_departure]
,[nb_arrival]
,[headcount]
FROM [dbo].[FACT_HR]
您可以使用CTE或派生表以及一些条件聚合来完成此操作。我不知道你没有聚合的意思,我不确定没有聚合是否可能: CTE: 派生表:
CREATE TABLE FACT_KPI (ID_KPI int, KPI_VALUE int)
CREATE TABLE DIM_KPI (ID_KPI int, KPI_LABEL varchar(25))
INSERT INTO FACT_KPI VALUES (1,25)
,(1,30)
,(2,15)
,(2,7)
,(3,12)
,(3,13)
INSERT INTO DIM_KPI VALUES (1, 'nb_departure')
,(2, 'nb_arrival')
,(3, 'headcount')
SELECT CASE WHEN ID_KPI = 1 THEN KPI_VALUE END AS nb_departure,
CASE WHEN ID_KPI = 2 THEN KPI_VALUE END AS nb_arrival,
CASE WHEN ID_KPI = 3 THEN KPI_VALUE END AS headcount
FROM
(SELECT F_KPI.ID_KPI, KPI_VALUE, KPI_LABEL
FROM FACT_KPI F_KPI
INNER JOIN DIM_KPI ON F_KPI.ID_KPI = DIM_KPI.ID_KPI) FACT_KPI
其他注意事项,请下次使用ASCII表格,并请阅读注释。您可以使用pivot,如下所示:
Select nb_departure, nb_arrival, headcount from (
Select d.KPI_LABEL, f.KPI_VALUE
, RowN = Row_Number() over(order by d.id_kpi)
from dbo.Fact_KPI f
join dbo.Dim_KPI d
on f.ID_KPI = d.ID_KPI
) a
pivot (max(kpi_value) for kpi_label in ([nb_departure],[nb_arrival],[headcount])) p
+--------------+------------+-----------+
| nb_departure | nb_arrival | headcount |
+--------------+------------+-----------+
| 25 | NULL | NULL |
| 30 | NULL | NULL |
| NULL | 15 | NULL |
| NULL | 7 | NULL |
| NULL | NULL | 12 |
| NULL | NULL | 13 |
+--------------+------------+-----------+
输出如下:
Select nb_departure, nb_arrival, headcount from (
Select d.KPI_LABEL, f.KPI_VALUE
, RowN = Row_Number() over(order by d.id_kpi)
from dbo.Fact_KPI f
join dbo.Dim_KPI d
on f.ID_KPI = d.ID_KPI
) a
pivot (max(kpi_value) for kpi_label in ([nb_departure],[nb_arrival],[headcount])) p
+--------------+------------+-----------+
| nb_departure | nb_arrival | headcount |
+--------------+------------+-----------+
| 25 | NULL | NULL |
| 30 | NULL | NULL |
| NULL | 15 | NULL |
| NULL | 7 | NULL |
| NULL | NULL | 12 |
| NULL | NULL | 13 |
+--------------+------------+-----------+
这是一个很好的起点。