SQL-сервер заказа в объявлении таблица не правильная
Я сделал этот запрос на sql server 2014, дело в том, что я должен правильно упорядочить результат запроса, первые две строки вывода запроса (ниже) являются правильными, в то время как начиная с третьей строки поля DescrizioneDis, CostoUnitario e Quantita, я вставляю в четвертую строку вместо третьей, я не могу понять, где я ошибаюсь? Я ввел запрос ниже, неправильный результат видео, результат, который я хотел бы получить, и структуры таблиц!
Изображение неправильного результата
Изображение правильного результата(который я должен получить)
Я бы хотел получить такой результат
SQL Create Table of Capitolo:
CREATE TABLE [dbo].[Capitolo]( [IdCapitolo] [int] IDENTITY(1,1) NOT NULL, [IdPreventivo] [int] NULL, [NumeroCapitolo] [int] NULL, [Descrizione] [varchar](5000) NOT NULL, [Ricarico] [money] NULL, [Modificaincorso] [varchar](100) NULL, [Tipologia] [varchar](20) NULL, [PrezzoRiservato] [money] NULL, PRIMARY KEY CLUSTERED ( [IdCapitolo] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
SQL Create Table of SottoCapitolo:
CREATE TABLE [dbo].[SottoCapitolo]( [IdSottoCapitolo] [int] IDENTITY(1,1) NOT NULL, [IdCapitolo] [int] NULL, [Tipo] [varchar](500) NULL, [Codice] [varchar](500) NULL, [CodiceDistinta] [int] NULL, [Descrizione] [varchar](5000) NULL, [DescrizioneEstesa] [varchar](5000) NULL, [UnitaMisura] [varchar](10) NULL, [SottoCapitolo1] [varchar](100) NULL, [SottoCapitolo2] [varchar](100) NULL, [SottoCapitolo3] [varchar](100) NULL, [Note] [varchar](1000) NULL, [RicaricoManodopera] [float] NULL, [Quantita] [int] NULL, [CostoUnitario] [money] NULL, [Images] [varbinary](max) NULL, [PrezzoListino] [money] NULL, PRIMARY KEY CLUSTERED ( [IdSottoCapitolo] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [Tipo] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [Codice] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [CodiceDistinta] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [Descrizione] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [DescrizioneEstesa] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [UnitaMisura] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [SottoCapitolo1] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [SottoCapitolo2] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [SottoCapitolo3] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [Note] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT ((0)) FOR [RicaricoManodopera] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [Quantita] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [CostoUnitario] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT (NULL) FOR [Images] GO ALTER TABLE [dbo].[SottoCapitolo] ADD DEFAULT ((0)) FOR [PrezzoListino] GO ALTER TABLE [dbo].[SottoCapitolo] WITH CHECK ADD FOREIGN KEY([IdCapitolo]) REFERENCES [dbo].[Capitolo] ([IdCapitolo]) GO
Что я уже пробовал:
Теперь это мой вопрос:
DECLARE @T AS TABLE ( Descrizione varchar(5000), NumeroCapitolo varchar(100), SottoCapitolo1 varchar(5000), SottoCapitolo2 varchar(5000), SottoCapitolo3 varchar(5000), Totale money, DescrizioneEstesa varchar(5000), Images image, CostoUnitario money, Quantita money, DescrizioneDis varchar(5000), Tipologia varchar(300), PrezzoRiservato money, UM varchar(50) ); INSERT INTO @T SELECT Capitolo.Descrizione, Capitolo.NumeroCapitolo, SottoCapitolo.SottoCapitolo1, SottoCapitolo.SottoCapitolo2, SottoCapitolo.SottoCapitolo3, (ROUND(((((ROUND((((((((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario) / 100) * Capitolo.Ricarico) + (((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario)) * 1), 2)) / 100) * PercentualeMargine) + (ROUND((((((((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario) / 100) * Capitolo.Ricarico) + (((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario)) * 1), 2))), 2)) * SottoCapitolo.Quantita AS Totale, SottoCapitolo.DescrizioneEstesa, SottoCapitolo.Images, ROUND(((((ROUND((((((((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario) / 100) * Capitolo.Ricarico) + (((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario)) * 1), 2)) / 100) * PercentualeMargine) + (ROUND((((((((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario) / 100) * Capitolo.Ricarico) + (((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario)) * 1), 2))), 2) AS CostoUnitario, SottoCapitolo.Quantita, CASE WHEN Tipologia = 'Prezzo' THEN SottoCapitolo.Descrizione ELSE '' + SottoCapitolo.Codice + ' ' + SottoCapitolo.Descrizione END AS DescrizioneDis, Capitolo.Tipologia, Capitolo.PrezzoRiservato, SottoCapitolo.UnitaMisura AS UM FROM Capitolo INNER JOIN SottoCapitolo ON SottoCapitolo.IdCapitolo = Capitolo.IdCapitolo INNER JOIN Preventivo ON Preventivo.IdPreventivo = Capitolo.IdPreventivo WHERE Preventivo.IdPreventivo = '196'; SELECT CASE WHEN ROW_NUMBER() OVER (PARTITION BY a.Descrizione ORDER BY a.Descrizione) = 1 THEN a.Descrizione ELSE '' END AS Descrizione, a.NumeroCapitolo, a.SottoCapitolo1, a.SottoCapitolo2, a.SottoCapitolo3, a.DescrizioneDis, a.CostoUnitario, a.Quantita, a.Totale AS TotaleCap, a.DescrizioneEstesa, a.Images, a.Tipologia, a.PrezzoRiservato, a.UM FROM (SELECT 1 AS d, ROW_NUMBER() OVER (PARTITION BY Descrizione ORDER BY Descrizione) AS r, Descrizione, NumeroCapitolo, SottoCapitolo1, SottoCapitolo2, SottoCapitolo3, Totale, DescrizioneDis, Images, CostoUnitario, Quantita, DescrizioneEstesa, Tipologia, PrezzoRiservato, UM FROM @T UNION ALL SELECT 2, 0, Descrizione, NumeroCapitolo, '', '', '', SUM(Totale), '', '', '', '', '', Tipologia, PrezzoRiservato, '' FROM @T GROUP BY NumeroCapitolo, Descrizione, PrezzoRiservato, Tipologia) AS a ORDER BY NumeroCapitolo
RDBurmon
какая ошибка? вы можете вставить подробное сообщение об ошибке здесь?
rikidev
Я выразился плохо, это не дает мне ошибок, проблема в том, что я ошибаюсь в упорядочении результатов в запросе! должен дать мне результат, который присутствует на изображении: https://i.stack.imgur.com/SnM39.jpg
RDBurmon
это снимок экрана Вашего управления GridView? bcz я вижу, что порядок правильный в соответствии со значениями в NumeroCapitolo (1,1,2,2)
rikidev
тогда мой блик заключается в том, что на первом изображении проблема заключается в том, что единственными строками в правильном выводе являются первая и вторая, третья показывает поля, отмеченные зеленым цветом (на втором изображении) в строке 4, а не в третьей
Tomas Takac
Вы указали " заказ по NumeroCapitolo`, и вот что вы получили. Если вы хотите другой заказ, вам нужно изменить свой заказ по заявлению.
rikidev
Точно, я не знаю, как изменить порядок так, чтобы строка 3 имела (DescrizioneDis,CostoUnitario e Quantita), кроме пустой
Tomas Takac
К сожалению, NULL рассматривается SQL Server как наименьшее значение. Вот несколько обходных путей: Того, SQL-сервер, дата и обнуляет последний - переполнение стека[^]
rikidev
Я читал, что там написано в ссылке, но не понял, как применить ее к моему запросу!