Click here to Skip to main content
15,881,089 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I made this query on sql server 2014, the fact is that I have to correctly order the result of the query, the first two lines of output of the query (below) are correct while from the third onwards the fields DescrizioneDis, CostoUnitario e Quantita, I get inserted in the fourth row instead of the third, I can not figure out where I'm wrong? I entered the query below, the wrong video result, the result I would like to get and the table structures!

IMAGE OF Incorrect Result
IMAGE OF Correct result(that i should get)

I WOULD LIKE to get this result

SQL Create Table of Capitolo:
SQL
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:
SQL
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


What I have tried:

This is my Query now:
SQL
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
Posted
Updated 22-Feb-18 4:03am
v7
Comments
RDBurmon 22-Feb-18 6:02am    
which error? can you paste detail error message here?
rikidev 22-Feb-18 6:16am    
I expressed myself badly, it does not give me errors, the problem is that I am wrong in the ordering of the results in the query! should give me the result that is present in the image: https://i.stack.imgur.com/SnM39.jpg
RDBurmon 22-Feb-18 6:26am    
is this screen shot from your gridview? bcz I can see the order is correct as per values in NumeroCapitolo (1,1,2,2)
rikidev 22-Feb-18 6:30am    
then my glare is that in the first image, the problem is that the only lines in correct output are the first and second, the third shows the fields marked in green (in the second image) in line 4 and not in the third
Tomas Takac 22-Feb-18 6:29am    
You have specified `ORDER BY NumeroCapitolo` and this is what you got. If you want different ordering you need to change your ORDER BY statement.

1 solution

Hello:
I´m afraid that i dont understand exactly the problem, but i think that if you replace
SQL
Order by NumeroCapitolo

by
SQL
Order by NunmeroCapitolo, 
CASE  ( (DescrizioneDis IS NULL)  OR DescrizioneDis='') AND CostoUnitario=0 AND Quantita=0 THEN 1 ELSE 0 END 

then in the same NumeroCapitulo you can see the rows ordered in the following order:

- first (value 0) all the raws that doesn´t fit in the next paragraph
- last (value 1) all the raws that the DescrizioneDis, CostoUnitario and Quantita are EMPTY


Excuse me if i haven´t understood what do you mean.
 
Share this answer
 
v3
Comments
rikidev 22-Feb-18 10:04am    
I had already tried this type of solution but it does not work, I'm sorry but I'm not how to explain correctly,I published here an image of the result I should get: https://imgur.com/qBE4Qh4
Member 7870345 22-Feb-18 10:21am    
I´ve made a correction in my previous response in hope can help you
rikidev 22-Feb-18 10:29am    
I tried with the solution you wrote but it does not work properly, if I do it I'll invert the first one with the second one

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900