SQL Select语句使用同一列中的日期添加列

时间:2018-10-13 09:27:24

标签: sql sql-server select

此第一条select语句将基于日期显示数据。第二条选择语句也将如此。两个日期都在一列中,我想从一个datagridview中的两个日期中减去“每日计量表”的金额。

Select Machine.ID,Clientinfo.Clientname,Machine.MachineLocation, Machine.MachineType,DailyMeter,DailyCashAmt,DailyCardAmt,DailyCashAmt+DAilyCardAmt as TOTALAMT,Dailydate
from  Machine 
inner join Clientinfo on Clientinfo.ID = Machine.MachineID 
inner join DailyInput on Dailyinput.DailyId = Machine.ID 
 Where Clientinfo.ClientRoutenum = '1' and dailydate = '10-11-18'

(select DailyMeter from DailyInput where Dailydate = '10-10-18')
这些查询的结果是两个结果,每个选择之一。我希望较低的结果成为第一个结果的一部分,因此我可以从10-10-18的日计费量中减去10-11-18的日计费量。我把它们放在这里只是为了清楚。前1名无济于事。无法将选择项放在第一位作为子项,因为存在多行。感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我假设一台机器每天在DailyInput表中有一条记录

Select Machine.ID, Clientinfo.Clientname, Machine.MachineLocation, Machine.MachineType, DailyMeter, DailyCashAmt, 
       DailyCardAmt, DailyCashAmt+DAilyCardAmt as TOTALAMT, Dailydate, di2.DailyMeter as LastDayMeter
  from Machine inner join Clientinfo on Clientinfo.ID = Machine.MachineID 
               inner join DailyInput on Dailyinput.DailyId = Machine.ID 
               left outer join DailyInput as di2 on di2.DailyId = Machine.ID AND di2.Dailydate = '10-10-18'
 Where Clientinfo.ClientRoutenum = '1' 
   and dailydate = '10-11-18'

答案 1 :(得分:0)

您可以使用条件汇总来调整日期:

Select m.ID, ci.Clientname, m.MachineLocation, m.MachineType,
       max(case when di.dailydate = '10-11-18' then di.DailyMeter end) as dailymeter_date2,
       max(case when di.dailydate = '10-11-18' then di.DailyCashAmt end) as DailyCashAmt_date2,
       max(case when di.dailydate = '10-11-18' then di.DailyCardAmt end) as DailyCardAmt_date2,
       max(case when di.dailydate = '10-11-18' then di.DailyCashAmt + di.DAilyCardAmt end) as totalamt_date2,
       max(case when di.dailydate = '10-10-18' then di.DailyMeter end) as dailymeter_date1,
       max(case when di.dailydate = '10-10-18' then di.DailyCashAmt end) as DailyCashAmt_date1,
       max(case when di.dailydate = '10-10-18' then di.DailyCardAmt end) as DailyCardAmt_date1,
       max(case when di.dailydate = '10-10-18' then di.DailyCashAmt + di.DAilyCardAmt end) as totalamt_date1,
from  Machine m inner join
      Clientinfo ci
      on ci.ID = m.MachineID inner join
      DailyInput di
      on di.DailyId = m.ID 
where ci.ClientRoutenum = '1' and
      ci.dailydate in ('10-11-18', '10-10-18')
group by m.ID, ci.Clientname, m.MachineLocation, m.MachineType;

如果daildate被存储为日期,则比较值应为YYYY-MM-DD或YYYYMMDD格式。