2014-01-30 3 views
0

Я хотел бы добавить все 1 и 0 для столбца FIELD2 и использовать вывод суммы в новую колонкувычислить сумму продаж - SQL

SELECT   
    field1, field2, field3, field4....., 
    SUM(CASE WHEN field2= 1 THEN 1 ELSE 0 END) AS field1s, 
    SUM(CASE WHEN field2= 0 THEN 1 ELSE 0 END) AS field0s 
FROM 
    dbo.TableName 
GROUP BY 
    field1, field2, field3, field4.....; 

Этот метод не обеспечивает вывод, что мне нужно. Чтобы проиллюстрировать, что мне нужно, позвольте мне показать вам пример; У меня есть столбцы customerName, wentShopping. Для каждого клиента я хотел бы рассчитать общее количество времени, которое он/она отправил по магазинам, и поместить вывод в новую колонку.

Я написал SQL-запрос, но он не представляет собой сумму каждого клиента?

Это выход я получаю:

customerName wentShopping wentShopping0 wentShopping1 
    test   1   0    1 
    . 
    . 
    test   1   0    1 

, но это должно быть:

customerName wentShopping wentShopping0 wentShopping1 
    test   1   2    2 

Это происходит потому, что полное испытание временем шопинг в два раза и общее время он не ходил по магазинам также дважды

ответ

0

Если вы хотите получить суммы по клиенту, вам необходимо указать имя клиента в группе. Например:

SELECT customerName 
     , MAX(wentShopping) AS wentShopping -- did the customer go shopping at all? 
     , SUM(CASE 
      WHEN wentshopping = 1 THEN 1 /* or other column for hours shopped */ 
      ELSE 0 
      END) AS wentShopping1, 
     , SUM(CASE 
      WHEN wentShopping = 0 THEN 1 
      ELSE 0 
      END) AS wentShopping0 
     -- , MAX(age) AS age -- a line like this can pull in other data about the customer 
FROM dbo.tablename 
-- we JUST group by customerName here, since we want exactly 1 grouping per customer 
-- to do our sums here 
GROUP BY customerName 
+0

но то, что я хочу, чтобы все сведения об этом клиента, например, его возраст, DOB и т. д. ...? и я хочу, чтобы общее число 1 и 0 –

+0

@Dip: Я добавил пример того, как получить возраст здесь. Поскольку возраст будет одинаковым для всех строк в группе, мы можем просто взять одно из этих значений с MAX (или MIN) – ChaseMedallion

+0

, это дает мне одинаковые выходные данные 1 и 0 для каждого клиента, это не дает мне сумму, он дает только сумму одной строки. что, если один и тот же человек дважды ходил по магазинам. я показал результат, я получаю –

0

Я думаю, что ниже, поможет вам

SELECT field1 
     ,field3 
     ,field4 
     ,SUM(CASE WHEN field2 = 1 THEN 1 
       ELSE 0 
      END) AS timeShoppedFor1 
     ,SUM(CASE WHEN field2 = 0 THEN 1 
       ELSE 0 
      END) AS timeShoppedFor0 
FROM dbo.TableName 
GROUP BY field1 
     ,field3 
     ,field4 

Вы можете добавить все подано в группе Клаусом, который вы хотите.

запросов от комментариев:

SELECT customerName 
     ,wentShopping 
     ,SUM(CASE WHEN wentShopping0 = 1 THEN 1 
       ELSE 0 
      END) AS wentShopping0 
     ,SUM(CASE WHEN wentShopping1 = 1 THEN 1 
       ELSE 0 
      END) AS wentShopping1 
FROM TableName 
GROUP BY customerName 
     ,wentShopping 
+0

- этот вопрос такой же, как и мой вопрос, я не получаю итоговое значение, которое он мне дает только с 1 и 0. я показал выход я получаю –

+0

Select CustomerName, wentShopping, SUM (случай, когда wentShopping0 = 1 ТОГДА 1 ELSE 0 END), как wentShopping0, SUM (случай, когда wentShopping1 = 1 ТОГДА 1 ELSE 0 END), как wentShopping1 из таблицы group by customerName, goShopping –

+0

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

Смежные вопросы