c# - SQL查询中的if语句?

标签 c# sql if-statement

我有一个查询,它给了我多个结果,如下所示:

|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? 就像和 If 语句一样,我不知道这在 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

最佳答案

SQL-Server中,您可以在以下内容中使用ROW_NUMBER:

查询

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即使重复行数超过 2,它也会将每个重复行增加 1。

如果您只想增加 1,而不取决于有多少重复项,请使用 quantity-1 而不是 quantity+rn-1

更新

如果您只想获得最大数量且不重复的结果,您可以在下面使用 MAXGROUP BY 子句:

查询

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

关于c# - SQL查询中的if语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35194992/

相关文章:

sql - 在 Excel 2013 中查询超过 65536 行错误

c - 简化C中的条件代码

android - 从数据库中读取一个值

c# - 使用 C# 和 JSON 在 ASP.Net 中填充下拉列表和文本框

c# - 使用存储过程在 ASP Gridview 中自定义分页

python - SQlite UPDATE WHERE语法错误

sql - 在数据周期内有条件地增加字段值 - 有没有一种仅使用 SQL 的方法?

php - 在 PHP 中添加额外代码后,If 语句未运行

c# - MVC 5 项目和 Web Api 项目的区别

c# - 泛型警告 T 与其他类型的类型同名