как сгруппировать элементы по идентификатору элемента - PullRequest
0 голосов
/ 12 сентября 2011

У меня есть таблица с именем TRNSPOINDT.TRNSPOINDT имеет три поля, названных как itemid, Qty, projectname.Мне нужно сгруппировать элементы по itemid и отобразить сумму кол-во относительно itemid.Я сделал это, запрос выглядит следующим образом:

 SELECT ITMID ,SUM(QTY) AS QTY FROM TRNSPOINDT GROUP BY ITMID 

Проблема в том, что я должен отобразить имя проекта, соответствующее itemid.Но пока я пытаюсь отобразить имя проекта, я получил ошибку.

Я пробовал этот запрос,

    SELECT ITMID ,SUM(QTY) AS QTY,PROJECTNAME FROM TRNSPOINDT GROUP BY ITMID 

Я получил ошибку как,

   Column 'TRNSPOINDT.PROJECTNAME' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Я знаю, что я получил эту ошибку, потому что существует более одного имени проекта для одного itemid.Но я должен отобразить название проекта рядом с itemid.Как это сделать ..

Заранее спасибо, Praveen.T

Ответы [ 2 ]

0 голосов
/ 12 сентября 2011

Два способа в зависимости от того, что именно вы ищете. Сначала добавьте столбец с именем проекта в группу по.

SELECT ITMID ,SUM(QTY) AS QTY,PROJECTNAME FROM TRNSPOINDT GROUP BY ITMID, PROJECTNAME

ITMID     Sum(QTY)      PROJECTNAME
-----------------------------------
itm1      10            PROJ1
itm1      20            PROJ2
itm2      12            PROJ3

В результате будет отображаться имя проекта в результате, но сумма будет рассчитана для Qty для ProjectNAME, а не ITMID, поскольку вы говорите, что для одного ITMID существует более одного PROJECTNAME.

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

SELECT B.ITMID , B.QTY, A.PROJECTNAME
FROM TRANSPOINTDT As A INNER JOIN (SELECT ITMID ,SUM(QTY) AS QTY,PROJECTNAME FROM TRNSPOINDT GROUP BY ITMID) as B
ON A.ITMID = B.ITMID

ITMID      SUM(QTY)      PROJECTNAME
------------------------------------
itm1       30            PROJ1
itm2       12            PROJ3

Хотя добавлять колонку PROJECTNAME не имеет смысла, поскольку она не будет отображать правильную информацию.

0 голосов
/ 12 сентября 2011

Причина этой ошибки в том, что не имеет смысла включать имя проекта в этот запрос. Например, предположим, что у вас было

itmid   qty   projectname
    1     3         proj1
    1     7         proj2
    1     2         proj1
    3     4         proj1

Вы хотите строки для

itmid   qty
    1    12
    3     4

Но как бы вы прикрепили имя проекта к первой строке результатов?

Вы упоминаете в своем вопросе, что знаете причину, но у нее действительно нет решения, кроме группировки по элементам и проектам вместе или создания строки разделенных запятыми имен проектов для элементов (что не т точно "денормализован", но, возможно, это то, что вы хотите).

Вы имеете в виду это:

SELECT ITMID, SUM(QTY) AS QTY, PROJECTNAME 
FROM TRNSPOINDT 
GROUP BY ITMID, PROJECTNAME

Это дало бы

itmid   qty   projectname
    1     5         proj1
    1     7         proj2
    3     4         proj1

Группируется по всем комбинациям itemid-projectname.

...