SQL-запрос, чтобы найти сумму всех строк и количество дубликатов - PullRequest
5 голосов
/ 09 сентября 2010

Если данные представлены в следующем формате:

SID  TID  Tdatetime        QID   QTotal  
----------------------------------------
100  1    01/12/97 9:00AM  66    110   
100  1    01/12/97 9:00AM  66    110  
100  1    01/12/97 10:00AM 67    110  
100  2    01/19/97 9:00AM  66    .  
100  2    01/19/97 9:00AM  66    110  
100  2    01/19/97 10:00AM 66    110  
100  3    01/26/97 9:00AM  68    120  
100  3    01/26/97 9:00AM  68    120  
110  1    02/03/97 10:00AM 68    110  
110  3    02/12/97 9:00AM  64    115  
110  3    02/12/97 9:00AM  64    115  
120  1    04/05/97 9:00AM  66    105  
120  1    04/05/97 10:00AM 66    105  

Я бы хотел написать запрос для суммирования столбца QTotal для всех строк и найти количество повторяющихся строк для столбца Tdatetime.

Вывод будет выглядеть так:

  Year   Total  Count<br>
     97 | 1340 | 4
Третий столбец в результате не включает количество отдельных строк в таблице. И выходные данные сгруппированы по году в столбце TDateTime.

Ответы [ 6 ]

1 голос
/ 09 сентября 2010

Может помочь следующий запрос:

SELECT 
    'YEAR ' + CAST(sub.theYear AS VARCHAR(4)), 
    COUNT(sub.C), 
    (SELECT SUM(QTotal) FROM MyTable WHERE YEAR(Tdatetime) = sub.theYear) AS total
FROM 
   (SELECT 
        YEAR(Tdatetime) AS theYear, 
        COUNT(Tdatetime) AS C 
    FROM MyTable 
    GROUP BY Tdatetime, YEAR(Tdatetime)
    HAVING COUNT(Tdatetime) >= 2) AS sub
1 голос
/ 09 сентября 2010

Это будет работать, если вы действительно хотите сгруппировать по столбцу tDateTime:

SELECT DISTINCT tDateTime, SUM(QTotal), Count(distinct tDateTime)
FROM Table
GROUP BY tDateTime
HAVING  Count(distinct tDateTime) > 1

Но ваши результаты выглядят так, как будто вы хотите сгруппировать по годам в столбце tDateTime. Это правильно?

Если это так, попробуйте это:

SELECT DISTINCT YEAR (tDateTime), SUM(QTotal), Count(distinct tDateTime)
FROM Table
GROUP BY YEAR (tDateTime)
HAVING  Count(distinct tDateTime) > 1
0 голосов
/ 09 сентября 2010

Это первый раз, когда я задаю вопрос по stackoverflow.Похоже, я потерял свою оригинальную идентификационную информацию.Мне пришлось зарегистрироваться, чтобы войти и добавить комментарии к вопросу, который я написал.

Чтобы ответить на вопрос OMG Ponies, это база данных SQL Server 2008@Abe Miessler, строка с SID 120 не содержит дубликатов.первая строка для SID 120 показывает 9:00 AM в столбце datetime, а вторая строка показывает 10:00 AM.Я сделал несколько небольших изменений, чтобы заставить его работать.Благодарю.Спасибо Абэ Мисслеру и другим за вашу помощь.

0 голосов
/ 09 сентября 2010
SELECT
 YEar + year(Tdatetime),
 SUM ( QTotal ),
 (SELECT COUNT(*) FROM ( 
 SELECT Tdatetime FROM tDateTime GROUP BY Tdatetime        
 HAVING COUNT(QID) > 1) C
FROM
 Tdatetime t

GROUP BY 
 YEar + year(Tdatetime)
0 голосов
/ 09 сентября 2010

Что-то вроде:

select Year(Tdatetime)  ,sum(QTotal), count(1) from table group by year(Tdatetime )

или полная дата

select Tdatetime  ,sum(QTotal), count(1) from table group by year(Tdatetime) 

Или ваш уродливый синтаксис (:))

select 'Year ' + cast(Year(tdatetime) as varchar(4)) 
     + '|' + cast(sum(QTotal) as varchar(31)) 
     + '|' + cast(count(1) as varchar(31)) 
 from table group by year(Tdatetime )

Или ты хочешь только год? Суммировать все столбцы? Или только по годам?

0 голосов
/ 09 сентября 2010

Вы должны выполнить SELECT из этой таблицы GROUPing by QTotal, используя COUNT (subSELECT из этой таблицы, ГДЕ QTotal такой же).Если бы у меня было время, я бы написал вам SQL-выражение, но это займет несколько минут.

...