我现在尝试3天来格式化sql输出,这样我就可以把它放在带有PHPExcel的excel表中,尽可能少的步骤(因为我有一个非常庞大的Excel表格来生成)
我正在使用SQL SERVER 2005
这就是我没有使用任何支点的原因(因为我不知道怎么做......)
- [cause] |[nb]| [Value]
- CASSE | 20 | 8568,74
- DELEGATION SIGNATURE | 2 | 1268,96
- ERREUR DE LIVRAISON | 8 | 1654,64
- INTERNE | 10 | 3145,7
- PERTE | 94 | 26255,08
- SPOLIATION | 2 | 420
- VOL | 41 | 5747,76
所以现在我想要得到的是这样的东西:
- [cause] | [Value]
- CASSE | 20
- CASSE | 8568,74
- DELEGATION SIGNATURE | 2
- DELEGATION SIGNATURE | 1268,96
- ...
以下是我所做的:
SELECT
l1.Litige_Cause AS [cause], count(l2.Litige_Ref) AS [nb],
sum(lc.LitigeCProduit_Valeur) as [value]
FROM
LitigeCordon l1
LEFT JOIN LitigeCordon l2
ON l1.Litige_Ref = l2.Litige_Ref
AND YEAR(l2.Litige_DateEnvoi) = 2014 AND MONTH(l2.Litige_DateEnvoi) = 01
INNER JOIN LitigeCProduit lc
ON l1.Litige_Ref = lc.Litige_Ref
AND YEAR(l2.Litige_DateEnvoi) = 2014 AND MONTH(l2.Litige_DateEnvoi) = 01 GROUP BY l1.Litige_Cause
嗯,它必须承认我并不擅长SQL,我还是学生,而我在学校学到的几乎不是基础知识。所以我的问题是:它甚至可能吗?如果是的话,你可以给我一个建议,因为我不是只搜索一个原始的答案,我想更多地了解枢轴/ Unpivot功能是如何工作的,我已经尝试了很多东西,但它从来没有像想... ...
谢谢!
编辑: 对于那些可能感兴趣的人,我对@NoDisplayName答案做了一些修改,结果如下:
- [cause] Type | [Value]
- CASSE NB | 20
- CASSE Value| 8568,74
- DELEGATION SIGNATURE NB | 2
- DELEGATION SIGNATURE Value| 1268,96
- ...
我只添加了列"键入" " type"和#34;"而不是" col"
SELECT cause, type,
data as Value
FROM (SELECT cause,
CONVERT(VARCHAR(50), nb) nb1,
CONVERT(VARCHAR(50), value) value1
FROM Yourtable) a
UNPIVOT(data
FOR type IN([nb1],
[value1]))unpiv
希望这也有帮助:)
答案 0 :(得分:0)
我将使用Cross Apply
简单方法Unpivot
您的数据
SELECT cause,
cs.value
FROM yourtable
CROSS apply(VALUES (value),
(CONVERT(VARCHAR(50), nb))) cs (value)
或者您也可以使用Unpivot
SELECT cause,
data as Value
FROM (SELECT cause,
CONVERT(VARCHAR(50), nb) nb1,
value
FROM Yourtable) a
UNPIVOT(data
FOR col IN([nb1],
[value]))unpiv
答案 1 :(得分:0)
这也应该有效:
SELECT l1.Litige_Cause AS [cause], count(l2.Litige_Ref) AS [nb] FROM LitigeCordon l1
UNION ALL
SELECT l1.Litige_Cause AS [cause], sum(lc.LitigeCProduit_Valeur) as [value] FROM LitigeCordon l1
ORDER BY l1.Litige_Cause