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

时间:2023-02-09 16:01:42

Hello I have a question on this query, my problem is that in this query I have to print the total of each chapter, but I have to do it only when the description changes, I try to explain with a diagram,how do I add a field with the addition of 1,2,3 only at the end of each description:

你好我对这个查询有疑问,我的问题是在这个查询中我要打印每章的总数,但是我只有在描述发生变化时才这样做,我试着用图解释一下,我该如何添加仅在每个描述的末尾添加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:

QUERY RUN:

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

After query

查询后

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

1 个解决方案

#1


1  

I hope this can help you further

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

Update

更新

DescrizioneDis is on the third column, Immagine on the fourth.

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

Result

结果

+----------------------+-----------+---------------+---------+
|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 |               |         |
+----------------------+-----------+---------------+---------+

Please specify further if this is not the desired output.

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

#1


1  

I hope this can help you further

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

Update

更新

DescrizioneDis is on the third column, Immagine on the fourth.

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

Result

结果

+----------------------+-----------+---------------+---------+
|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 |               |         |
+----------------------+-----------+---------------+---------+

Please specify further if this is not the desired output.

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