在 Sql-Server 實體上,我有三個表:
行動專案
| ID | 姓名 |
|---|---|
| 1 | 魚 |
| 2 | 肉汁 |
| 3 | 褲子 |
動作資料
| ID | 動作ID | 團體 | 場地 | 價值 |
|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 100 |
| 2 | 1 | 1 | 2 | 200 |
| 3 | 1 | 1 | 3 | 300 |
| 4 | 1 | 1 | 4 | 空值 |
| 5 | 1 | 1 | 5 | 空值 |
| 6 | 1 | 2 | 6 | “一些文字” |
| 7 | 2 | 1 | 1 | 50 |
| 8 | 2 | 1 | 2 | 60 |
| 9 | 2 | 1 | 3 | 70 |
成本核算
| ID | 動作ID | 休息 | 成本 |
|---|---|---|---|
| 1 | 1 | 普通的 | 11.3 |
| 2 | 1 | 子 | 54 |
| 3 | 1 | 優質的 | 0.4 |
| 4 | 3 | 普通的 | 22 |
| 5 | 3 | 優質的 | 0.67 |
我有一個查詢,匯總了每個的成本ActionItem:
select
ai.Id,
ai.Name,
sum(c.Cost)
from ActionItem ai
left join Costing c on ai.Id = c.ActionId
group by
ai.Id,
ai.Name
漂亮而直接:
| ID | 姓名 | (無列名) |
|---|---|---|
| 1 | 魚 | 65.7 |
| 2 | 肉汁 | 空值 |
| 3 | 褲子 | 22.67 |
我也創建了一個樞軸:
select * from
(select [ActionId], [Group], [Field], [Value] from ActionData) src
pivot (max([Value]) for [ActionId] in ([1],[2],[3],[4])) ppp
這讓我以正確的格式獲取資料:
| 團體 | 場地 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 1 | 1 | 100 | 50 | 空值 | 空值 |
| 1 | 2 | 200 | 60 | 空值 | 空值 |
| 1 | 3 | 300 | 70 | 空值 | 空值 |
| 1 | 4 | 空值 | 空值 | 空值 | 空值 |
| 1 | 5 | 空值 | 空值 | 空值 | 空值 |
| 2 | 6 | “一些文字” | 空值 | 空值 | 空值 |
但是我無法將這兩個查詢連接在一起,因為該 PIVOT 不包含ActionId... 即使我使用Select * from- 如何讓ActionIdcol 顯示在我的透視資料上,以便我可以將其連接到我的原始查詢的其余部分?
我今天無法讓sqlfiddle.com為 MS SQL SERVER 作業,但如果有人感興趣,這里有創建和插入:
CREATE TABLE ActionItem
([Id] int, [Name] varchar(5));
INSERT INTO ActionItem
([Id], [Name])
VALUES
(1, 'Fish'),
(2, 'Gravy'),
(3, 'Pants');
CREATE TABLE ActionData
([Id] int, [ActionId] int, [Group] int, [Field] int, [Value] varchar(11));
INSERT INTO ActionData
([Id], [ActionId], [Group], [Field], [Value])
VALUES
(1, 1, 1, 1, '100'),
(2, 1, 1, 2, '200'),
(3, 1, 1, 3, '300'),
(4, 1, 1, 4, NULL),
(5, 1, 1, 5, NULL),
(6, 1, 2, 6, '"Some Text"'),
(7, 2, 1, 1, '50'),
(8, 2, 1, 2, '60'),
(9, 2, 1, 3, '70')
;
CREATE TABLE Costing (
[Id] int,
[ActionId] int,
[Break] VARCHAR(9),
[Cost] FLOAT);
INSERT INTO Costing
([Id], [ActionId], [Break], [Cost])
VALUES
('1', '1', 'Normal', '11.3'),
('2', '1', 'Sub', '54'),
('3', '1', 'Premium', '0.4'),
('4', '3', 'Normal', '22'),
('5', '3', 'Premium', '0.67');
uj5u.com熱心網友回復:
不確定您期望什么輸出。
但是這里嘗試在 1 個資料透視表中加入兩個查詢。
select pvt.* from ( select d.ActionId, ai.Name --, d.[Group] , cast(d.[Field] as varchar(30)) as [Col] , try_cast(d.[Value] as float) as [Value] from ActionData d left join ActionItem ai on ai.Id = d.ActionId where isnumeric(d.[Value]) = 1 union all select c.ActionId, ai.Name --, 1 as [Group] , c.[Break] as [Col] , sum(c.Cost) as TotalCost from Costing c left join ActionItem ai on ai.Id = c.ActionId group by c.ActionId, ai.Name, c.[Break] ) src pivot ( max([Value]) for [Col] in ([1],[2],[3],[4],[Normal],[Premium],[Sub]) ) pvt GO操作 ID | 姓名 | 1 | 2 | 3 | 4 | 正常 | 高級 | 子 -------: | :---- | ---: | ---: | ---: | ---: | -----: | ------: | ---: 1 | 魚 | 100 | 200 | 300 | 空| 11.3 | 0.4 | 54 2 | 肉汁 | 50 | 60 | 70 | 空| 空| 空| 空 3 | 褲子 | 空| 空| 空| 空| 22 | 0.67 | 空值
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366518.html
標籤:sql sql-server
下一篇:獲取SQL中列的每個唯一對組合
