У меня есть запрос, который дает мне несколько результатов, например:

|DATE|------|DESCRIPTION|---|PDV|----------|ID|-------|NAME|--------|Value|-|Quantity|
2016-01-25    DESAYUNOS     REST            1   DEL PATRON COMBO    162.00    1
2016-01-25    COMIDAS       REST            1   DEL PATRON COMBO    162.00    1
2016-01-25    CENAS         REST            1   DEL PATRON COMBO    162.00    1
2016-01-25    DESAYUNOS     REST            1   DEL PATRON COMBO    162.00    1

Мой запрос:

SELECT
    [dbo].[CHEQUES].Fecha,  
    [dbo].[TURNOS].Descripcion, 
    [dbo].[CAPMO].Clave_PDV, 
    [dbo].[CAPMO].Pla AS Platillo_Id, 
    [dbo].[CAPMO].Descripcion, 
    [dbo].[CAPMO].Pre AS PrecioPlatillo, 
    [dbo].[CAPMO].Can AS CantidadPlatillo
FROM         
    [dbo].[CAPMO] 
INNER JOIN 
    [dbo].[CHEQUES] ON [dbo].[CAPMO].Clave_PDV = [dbo].[CHEQUES].Cla_PDV 
                    AND [dbo].[CAPMO].Che = [dbo].[CHEQUES].Che 
INNER JOIN 
    [dbo].[PLATILLOS] ON [dbo].[CAPMO].Pla = [dbo].PLATILLOS].Pla 
INNER JOIN 
    [dbo].[TURNOS] ON [dbo].[CAPMO].Clave_PDV = [dbo].[TURNOS].Clave_PDV
WHERE     
    ([dbo].[CHEQUES].St = 'P') AND ([dbo].[CAPMO].Stpl = 'A') 

Строки 1 и 4 абсолютно одинаковы, существует ли запрос, который может обнаруживать одинаковые строки и увеличивать | Quantity | Столбец по 1 для каждого равно? как и если заявлено некоторое время, я не знаю, возможно ли это в SQL

Я ищу такой вывод:

|DATE|------|DESCRIPTION|---|PDV|----------|ID|-------|NAME|--------|Value|-|Quantity|

2016-01-25    COMIDAS       REST            1   DEL PATRON COMBO    162.00    1
2016-01-25    CENAS         REST            1   DEL PATRON COMBO    162.00    1
2016-01-25    DESAYUNOS     REST            1   DEL PATRON COMBO    162.00    2
2
Arturo Martinez 4 Фев 2016 в 10:29

2 ответа

Лучший ответ

В SQL-Server вы можете использовать ROW_NUMBER в следующих случаях:

< Сильный > QUERY

select [date], [description], pdv, id, name, value, 
       case when rn > 1 then quantity+rn-1 else quantity end as quantity
from( 
    select *, 
           row_number() over(partition by [date], [description], pdv, id, name, value, quantity order by [date]) rn 
    from #t
)x

ДАННЫЕ ОБРАЗЦА

create table #t
(
    [date] date,
    [description] nvarchar(60),
    pdv nvarchar(60),
    id int,
    name nvarchar(60),
    value nvarchar(60),
    quantity int
)
insert into #t values
 ('2016-01-25','DESAYUNOS','REST',1,'DEL PATRON COMBO','162.00',1)
,('2016-01-25','COMIDAS'  ,'REST',1,'DEL PATRON COMBO','162.00',1)
,('2016-01-25','CENAS'    ,'REST',1,'DEL PATRON COMBO','162.00',1)
,('2016-01-25','DESAYUNOS','REST',1,'DEL PATRON COMBO','162.00',1)
,('2016-01-25','DESAYUNOS','REST',1,'DEL PATRON COMBO','162.00',1)
,('2016-01-25','DESAYUNOS','REST',1,'DEL PATRON COMBO','162.00',1)

ВЫХОД

date        description pdv     id  name                value   quantity
2016-01-25  CENAS       REST    1   DEL PATRON COMBO    162.00  1
2016-01-25  COMIDAS     REST    1   DEL PATRON COMBO    162.00  1
2016-01-25  DESAYUNOS   REST    1   DEL PATRON COMBO    162.00  1
2016-01-25  DESAYUNOS   REST    1   DEL PATRON COMBO    162.00  2
2016-01-25  DESAYUNOS   REST    1   DEL PATRON COMBO    162.00  3
2016-01-25  DESAYUNOS   REST    1   DEL PATRON COMBO    162.00  4

Взгляните на эту часть quantity+rn-1. Она увеличит каждую повторяющуюся строку на 1, даже если у вас их больше, чем 2.

Если вы хотите увеличить только на 1, независимо от того, сколько дубликатов используется, используйте quantity-1 вместо quantity+rn-1.

ОБНОВЛЕНИЕ

Если вы хотите получить результат без дубликатов только с максимальным количеством, вы можете использовать следующие предложения MAX и GROUP BY:

< Сильный > QUERY

select [date], [description], pdv, id, name, value, 
       max(case when rn > 1 then quantity +rn-1 else quantity end) as quantity
from( 
    select *, 
           row_number() over(partition by [date], [description], pdv, id, name, value, quantity order by [date]) rn 
    from #t
)x
group by [date], [description], pdv, id, name, value

ВЫХОД

date        description pdv     id  name                value   quantity
2016-01-25  CENAS       REST    1   DEL PATRON COMBO    162.00  1
2016-01-25  COMIDAS     REST    1   DEL PATRON COMBO    162.00  1
2016-01-25  DESAYUNOS   REST    1   DEL PATRON COMBO    162.00  4
3
Stanislovas Kalašnikovas 4 Фев 2016 в 07:54

Я собираюсь использовать GROUP BY , взгляните на этот пример ниже.

 SELECT  |DATE|
        ,|DESCRIPTION|
        ,|PDV|
        ,|ID|
        ,|NAME|
        ,|Value|
        ,SUM(|Quantity|)
FROM @YourTable
GROUP BY  |DATE|
         ,|DESCRIPTION|
         ,|PDV|
         ,|ID|
         ,|NAME|
         ,|Value|
0
Edward N 4 Фев 2016 в 07:43