nischalinn Ответов: 2

Предложение MS SQL GROUP by требует наличия всех атрибутов


У меня есть два стола

CREATE TABLE [DBO].[TBL_PRODUCTION] ( 
	 PRODUCTION_ID INT IDENTITY(1, 1) NOT NULL	
	,PRODUCTION_NAME NVARCHAR(200) NOT NULL
	,PRODUCTION_TYPE INT NOT NULL
	,PRODUCTION_QUANTITY INT
	,CONSTRAINT PK_PRODUCTION PRIMARY KEY (PRODUCTION_ID)
	)
INSERT INTO [DBO].[TBL_PRODUCTION] VALUES ('SGU',1, 100)
INSERT INTO [DBO].[TBL_PRODUCTION] VALUES ('BGU',2, 150)

CREATE TABLE [DBO].[TBL_DISTRIBUTOR] ( 
	 DISTRIBUTOR_ID INT IDENTITY(1, 1) NOT NULL
	,PRODUCTION_ID INT NOT NULL	
	,QUARTER_TYPE INT NOT NULL
	,DEMAND_QUANTITY INT	
	,CONSTRAINT PK_DISTRIBUTOR PRIMARY KEY (DISTRIBUTOR_ID)
	)
INSERT INTO [DBO].[TBL_DISTRIBUTOR] VALUES (1,555,1,25)
INSERT INTO [DBO].[TBL_DISTRIBUTOR] VALUES (1,555,2,25)
INSERT INTO [DBO].[TBL_DISTRIBUTOR] VALUES (1,655,3,25)
INSERT INTO [DBO].[TBL_DISTRIBUTOR] VALUES (2,555,1,25)
INSERT INTO [DBO].[TBL_DISTRIBUTOR] VALUES (2,745,2,25)
INSERT INTO [DBO].[TBL_DISTRIBUTOR] VALUES (3,745,3,25)
INSERT INTO [DBO].[TBL_DISTRIBUTOR] VALUES (1,745,3,10)
INSERT INTO [DBO].[TBL_DISTRIBUTOR] VALUES (2,745,3,50)


Мне нужно показать данные об общем распределении на ежеквартальной основе. Я имею в виду, сколько всего продукции распределяется в каждом квартале.
Запрос должен быть ГРУППИРОВАН только PRODUCTION_ID, а не другими, но когда я это делаю, я получаю ошибку как
Column 'DBO.TBL_PRODUCTION.PRODUCTION_NAME' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

И когда я комментирую A. QUARTER_TYPE в предложении GROUP BY я получаю ошибку как::
Column 'DBO.TBL_DISTRIBUTOR.QUARTER_TYPE' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.


Почему это так? Или есть какие-то проблемы с моим запросом?

Что я уже пробовал:

SELECT 
A.PRODUCTION_ID 
,B.PRODUCTION_NAME
,A.QUARTER_TYPE 
,SUM(A.DEMAND_QUANTITY) [TOTAL DISTRIBUTED]
FROM [DBO].[TBL_DISTRIBUTOR] A
INNER JOIN [DBO].[TBL_PRODUCTION] B ON A.PRODUCTION_ID = B.PRODUCTION_ID
GROUP BY
A.PRODUCTION_ID  
,B.PRODUCTION_NAME
,A.QUARTER_TYPE 
ORDER BY A.PRODUCTION_ID

2 Ответов

Рейтинг:
0

CHill60

У вас есть некоторые проблемы с вашими образцами данных - когда я пытался их использовать (обратите внимание, что я использую временные версии ваших таблиц) Я получил сообщение об ошибке

Цитата:
Явное значение столбца identity в таблице '#TBL_DISTRIBUTOR' может быть задано только в том случае, если используется список столбцов и включен параметр IDENTITY_INSERT.
Однако дорога идет все дальше и дальше...
Цитата:
Мне нужно показать данные об общем распределении на ежеквартальной основе. Я имею в виду, сколько всего продукции распределяется в каждом квартале.
Когда я читаю это, я автоматически "вижу" в своей голове данные, представленные следующим образом
PRODUCTION_ID	PRODUCTION_NAME	Q1	Q2	Q3	Q4
1		SGU		25	25	35	0
2		BGU		25	25	50	0
Так что для меня это будет включать в себя использование сводной таблицы - взгляните на Простой способ использования Pivot в SQL-запросе[^]