1 Вопрос: Лучший способ группировать и считать несколько столбцов SQL

вопрос создан в Wed, May 8, 2019 12:00 AM
I have a survey table that shows the answers that people have taken once 
a month when they enter a contest. I'm trying to find a better way to 
have the sum of  people who answer "Just Me ,My Spuse/Partner" and 
another sum of people who people who answer  Children, 0-5, 6-12,13-17

This is the table called "Survey" that is provided:
User    JustMe      Children 0-5      Children 6-12    Myspouse/partner
  5      N              N               N                  N                           
  5      N              N               N                  N
  4      N              N               N                  N
  4      N              N               N                  N
 24      N              N               N                  N
 24      N              N               N                  N
 12      N              N               N                  N
 12     Just Me         N               N              Myspousepartner           
 46     Just Me         N        Children 6-12 years   Mypousepartner
 46     Just Me         N        Children 6-12 years   Mypousepartner

Я просто надеюсь, что у меня будет такой стол

Я хочу, чтобы в моей таблице отображалась сумма детей в возрастной группе и Justme /Partner

I hope my output will be like this:
Children    JustMe/Partner
4045         1200 


  * I tried this code:
    SELECT 
    Children_13_17_years,Children_6_12_years,
    TotalSubjects= Count(*) Over (partition by Children_13_17_years),
    TotalSub= Count(*) Over (partition by Children_6_12_years)
    
0
  1. Почему вы не можете сделать SUM(CASE WHEN answer in (children answers) THEN 1 ELSE 0 END) as Children , SUM(CASE WHEN answer in (Just me / Spouse) THEN 1 ELSE 0 END) as JustMe/Partner
    2019-05-08 16: 10: 45Z
  2. Пожалуйста, добавьте ожидаемый набор результатов.
    2019-05-08 16: 19: 08Z
  3. @ mkRabbani Я хочу, чтобы моя таблица выглядела так: Дети JustMe /Partner 4045 1200
    2019-05-08 16: 34: 28Z
  4. @ WEI_DBA Я попробовал этот метод, но не получил счетчик. все значения были равны 0, поэтому я использую раздел over, и я также использовал счетчик выбора (children 6-12,0-5,12-17)
    2019-05-08 16: 37: 34Z
  5. Можете ли вы опубликовать тот запрос, который вы пробовали?
    2019-05-08 16: 53: 23Z
1 ответ                              1                         

Попробуйте выбрать сумму на основе регистрационных примеров. Если выписан регистр, сумма увеличивается на 1.

SELECT 
   SUM(CASE WHEN [Children 0-5] IS NOT NULL OR [Children 6-12] IS NOT NULL OR [Children 13-17] IS NOT NULL THEN 1 ELSE 0 END) as '[Children]',
   SUM(CASE WHEN [JustMe] IS NOT NULL OR [Myspouse/partner] IS NOT NULL THEN 1 ELSE 0 END) as '[JustMe/Partner]'
FROM [TableName]

** Возможно, вам придется изменить имена столбцов, псевдонимы и имена таблиц в квадратных скобках. Вам также может потребоваться изменить операторы case на col != 'N', если в вашей базе данных есть символ N, а не ноль.

    
1
2019-05-08 17: 04: 43Z
  1. У меня есть N символов в базе данных, и когда я попытался использовать этот запрос, ВЫБЕРИТЕ СУММУ (СЛУЧАЙ, КОГДА [Children_0_5_years] col! = 'N' ИЛИ ​​[Children_6_12_years] col! = 'N' ИЛИ ​​[Children_13_17_years] col! = 'N' THEN 1 ELSE 0 END) как [Дети], СУММА (СЛУЧАЙ, КОГДА [Just_Me] col! = 'N' ИЛИ ​​[My_spousepartner] col! = 'N' THEN 1 ELSE 0 END) как [JustMe /Partner] FROM [2019_Audience_Report_Activity_101] Я получил этот ответ Выражение не булева типа, указанное в контексте, где ожидается условие, около 'col'.
    2019-05-08 17: 42: 47Z
  2. @ cesco [Children_0_5_years] col следует заменить на любой столбец с указанным именем. Вам не нужно слово col. Сделайте это для всех столбцов в выражениях case
    2019-05-08 17: 56: 01Z
  3. ах хорошо. На этот раз запрос работает. Спасибо @dvo
    2019-05-08 18: 24: 15Z
  4. @ cesco рады помочь
    2019-05-08 18: 24: 29Z
источник размещен Вот