сравнить два разных диапазона дат продаж в двух столбцах - PullRequest
0 голосов
/ 24 декабря 2018

Я хочу сравнить два разных диапазона дат продаж в двух столбцах .. Я использую запрос ниже, но он дает неправильные продажи .. Пожалуйста, исправьте мой запрос

select s1.Itm_cd,s1.Itm_Name,Sum(S1.amount),Sum(s2.amount) 
from salestrans s1,salestrans s2 
where s1.Itm_cd = S2.Itm_cd 
and S1.Tran_dt between '20181101' and'20181130'
and S2.Tran_dt between '20171101' and '20171130' 
group by s1.Itm_cd,s1.Itm_Name 
Order by s1.Itm_cd

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Пожалуйста, попробуйте следующее

select s1.Itm_cd,s1.Itm_Name,Sum(S1.amount),Sum(s2.amount) 
from salestrans s1,salestrans s2 
where s1.Itm_cd = S2.Itm_cd 
and Convert(Varchar(10),S1.Tran_dt,112) between '20181101' and'20181130'
and  Convert(Varchar(10),S2.Tran_dt,112) between '20171101' and '20171130' 
group by s1.Itm_cd,s1.Itm_Name 
Order by s1.Itm_cd

Здесь логика заключается в том, что в правой части при сравнении вы предоставляете только дату, а не разделитель и время.Аналогичным образом следует применить к столбцу в левой части для сравнения.

if(Convert(Varchar(10), getdate(),112) = '20181224')
  print 'Matched'
else
  print 'Not Matched'

if(getdate() = '20181224')
   print 'Matched'
else
  print 'Not Matched'

Здесь выходные данные равны Matched для первого и Not Matched, поскольку в первом случае для сравнения был взят одинаковый формат обеих сторон..

0 голосов
/ 24 декабря 2018

Я подозреваю, что вы хотите условную агрегацию здесь:

WITH cte AS (
    SELECT
        s1.Itm_cd,
        s1.Itm_Name,
        SUM(CASE WHEN s1.Tran_dt BETWEEN '20181101' AND '20181130'
                 THEN s1.amount ELSE 0 END) AS sum_2018,
        SUM(CASE WHEN s1.Tran_dt BETWEEN '20171101' AND '20171130'
                 THEN s1.amount ELSE 0 END) AS sum_2017
    FROM salestrans s1
    GROUP BY
        s1.Itm_cd,
        s1.Itm_Name
)

SELECT
    Itm_cd,
    Itm_Name,
    sum_2018,
    sum_2017,
    CASE WHEN COALESCE(sum_2017, 0) <> 0
         THEN FORMAT(100.0 * (sum_2018 - sum_2017) / sum_2017, 'N', 'en-us')
         ELSE 'NA' END AS growth_pct
FROM cte
ORDER BY
    Itm_cd;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...