仅打印一个字段的总和一次

时间:2017-03-15 07:53:28

标签: sql sql-server sql-server-2014

你好我对这个查询有疑问,我的问题是在这个查询中我要打印每章的总数,但是我只有在描述发生变化时才这样做,我试着用图解释一下,怎么样如何在每个描述的末尾添加一个添加了1,2,3的字段:

Descrizione                            Totale                TotaleCapitolo         DescrizioneDis

descrizione di prova                                       ------1----------             ---------------

                                                           -------2---------             ---------------

                                      SUM(1,2,3)          -------3---------             ---------------

descrizione di prova 2                                    ----------------            -----           

QUERY:

SELECT 

CASE WHEN ROW_NUMBER() OVER(PARTITION BY Capitolo.Descrizione order by Capitolo.Descrizione) = 1 THEN Capitolo.Descrizione ELSE '' END AS 'Descrizione',

SottoCapitolo.CostoUnitario as TotaleCapitolo,SottoCapitolo.Descrizione as DescrizioneDis, SottoCapitolo.Immagine, SottoCapitolo.DescrizioneEstesa, SottoCapitolo.Quantita, ROUND(((SottoCapitolo.CostoUnitario) + (((SottoCapitolo.CostoUnitario) / 100) * PercentualeMargine) + (((SottoCapitolo.CostoUnitario) / 100) * PercentualeUtile) + (((SottoCapitolo.CostoUnitario) / 100) * PercentualeSpeseGenerali)), 0) as CostoUnitario FROM Preventivo inner join Capitolo on Preventivo.IdPreventivo = Capitolo.IdPreventivo inner join SottoCapitolo on SottoCapitolo.IdCapitolo = Capitolo.IdCapitolo  where Preventivo.IdPreventivo='7' order by Capitolo.Descrizione 

QUERY RUN:

enter image description here

查询后

enter image description here

1 个答案:

答案 0 :(得分:0)

我希望这可以帮助你进一步

<强>更新

DescrizioneDis在第三栏,Immagine在第四栏。

DECLARE @T AS TABLE (Descrizione VARCHAR(255), Totale DECIMAL(18,6), DescrizioneDis VARCHAR(255), Immagine VARCHAR(255))
INSERT INTO @T 
VALUES 
    ('descrizione di prova', 102.40, 'Tastiera ...', 'I:\So...'),
    ('descrizione di prova', 176.076, 'Echo 927 ...', 'I:\So...'),
    ('descrizione di prova', 32.03, 'CASS IP55 ...', '0'),
    ('descrizione di prova 2', 330.39, 'Accoppiatore ...', 'I:\So...')

SELECT CASE WHEN ROW_NUMBER() OVER(PARTITION BY a.Descrizione order by a.Descrizione) = 1 THEN a.Descrizione ELSE '' END AS Descrizione, 
    a.Totale, a.DescrizioneDis
FROM (
    SELECT 1 AS d, ROW_NUMBER() OVER(PARTITION BY Descrizione order by Descrizione) AS r, Descrizione, Totale, DescrizioneDis, Immagine
    FROM @T
    UNION ALL
    SELECT 2, 0, Descrizione, SUM(Totale), '', ''
    FROM @T
    GROUP BY Descrizione
    ) AS a
ORDER BY a.Descrizione, a.d

结果

+----------------------+-----------+---------------+---------+
|Descrizione           |Totale     |DescrizioneDis |Immagine |
+----------------------+-----------+---------------+---------+
|descrizione di prova  |102.400000 |Tastiera ...   |I:\So... |
|                      |176.076000 |Echo 927 ...   |I:\So... |
|                      |32.030000  |CASS IP55 ...  |0        |
|                      |310.506000 |               |         |
|descrizione di prova 2|330.390000 |Accoppiatore ..|I:\So... |
|                      |330.390000 |               |         |
+----------------------+-----------+---------------+---------+

如果这不是所需的输出,请进一步说明。