Могу ли я достичь ниже с SQL CTE? Или как этого достичь? - PullRequest
0 голосов
/ 07 апреля 2020

Это фиктивная таблица клиентов. Я приложил таблицу ввода [! [Введите описание изображения здесь] [1]] [1]

SELECT COUNT(*) as c1 FROM [Customer]
WHERE country='Germany' 
and Purchasedate is null

SELECT COUNT(*) as c2 FROM [Customer]
WHERE country='Germany' 
and convert(date,Purchasedate) ='2020-04-07'

SELECT COUNT(*) as c3 FROM [Customer]
WHERE country='Germany' 
and convert(date,Purchasedate) ='2020-04-05'

The above code gives 
c1
5
---
c2
3
--
c3
3

But I need a solution where I need all the 3 outputs into a single row
Eg:
c1|c2|c3
5 |3 |3

Мне нужна эта структура как отдельный набор данных, так как я собираюсь использовать ее в своем отчете ssrs , Какую sql технику я могу использовать для достижения этой цели? Есть ли способ, которым я могу использовать CTE. Пожалуйста, помогите мне с этим.

  [1]: https://i.stack.imgur.com/ZLb29.png

Ответы [ 2 ]

3 голосов
/ 07 апреля 2020

Вы можете использовать выражения case для этого.

   SELECT
      SUM(CASE WHEN code=1 AND month=1 THEN 1 END) as c1,
      SUM(CASE WHEN code=2 AND month=2 THEN 1 END) as c2,
      SUM(CASE WHEN code=3 AND month=3 THEN 1 END) as c3
    FROM yourtable;
1 голос
/ 07 апреля 2020

Возможно, это может быть базовое c решение:

Создание таблицы с примерами и заполнение ее данными

CREATE TABLE TableA (no INT , code INT , MONTH INT)
GO
INSERT TABLEA Values (1,1,1)
INSERT TABLEA Values (1,1,1)
INSERT TABLEA Values (1,1,1)
INSERT TABLEA Values (1,1,1)
INSERT TABLEA Values (2,2,2)
INSERT TABLEA Values (2,2,2)
INSERT TABLEA Values (2,2,2)
INSERT TABLEA Values (2,2,2)
INSERT TABLEA Values (2,2,2)
INSERT TABLEA Values (2,2,2)
INSERT TABLEA Values (3,3,3)
INSERT TABLEA Values (3,3,3)
INSERT TABLEA Values (3,3,3)
INSERT TABLEA Values (3,3,3)
INSERT TABLEA Values (3,3,3)

Решение:

SELECT (Select count(no)  from TableA
where code=1 and month =1
) AS c1 , (Select count(no)  from TableA
where code=2 and month =2) as c2 ,(Select count(no)  from TableA
where code=3 and month =3) as c3

+----+----+----+
| c1 | c2 | c3 |
+----+----+----+
|  4 |  6 |  5 |
+----+----+----+
...