Sql 只打印一次一个字段的总数
您好,我对这个查询有一个问题,我的问题是,在这个查询中,我必须打印每个章节的总数,但我必须在描述发生变化时进行打印,我尝试用图表解释,如何在每个描述的末尾添加一个字段,仅添加1,2,3:Sql 只打印一次一个字段的总数,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,您好,我对这个查询有一个问题,我的问题是,在这个查询中,我必须打印每个章节的总数,但我必须在描述发生变化时进行打印,我尝试用图表解释,如何在每个描述的末尾添加一个字段,仅添加1,2,3: Descrizione Totale TotaleCapitolo DescrizioneDis descrizione di prova
Descrizione Totale TotaleCapitolo DescrizioneDis
descrizione di prova ------1---------- ---------------
-------2--------- ---------------
SUM(1,2,3) -------3--------- ---------------
descrizione di prova 2 ---------------- -----
查询:
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
查询运行:
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
查询后
我希望这能进一步帮助您 更新 DescriptionEdis在第三列,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 | | |
+----------------------+-----------+---------------+---------+
如果这不是所需的输出,请进一步指定。这与C#或visual studio无关。这是一个SQL问题。请将问题标记为您正在使用的服务器(看起来像SQL server)。我错了,我调整了@Robi have try,但它没有运行!您正在运行哪个版本的sql server?我已经在SQL 2012上测试过了,它可以正常工作。这也适用于SQL 2008。我的版本是SQL server 2014。。。你有什么错误?我无法想象这在SQL 2014上不会起作用。我刚刚再次执行了此操作,没有任何问题。我仔细检查了我遇到的一些问题,当您的查询工作时,但我没有看到我的查询中包含的值(descripionedis,Immagine,…),我添加了您上面查询的图像