Я мог бы действительно немного помочь с этим запросом.
У меня есть таблица Products
.
CREATE TABLE [dbo].[Products](
[Id] [int] NOT NULL,
[Title] [nvarchar](50) NOT NULL,
-- Additional column omitted
CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED
(
[Id] ASC
) ON [PRIMARY]
) ON [PRIMARY]
И таблица Transactions
.
CREATE TABLE [dbo].[Transactions](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ProductId] [int] NOT NULL,
[TimeStamp] [datetime] NOT NULL,
[Quantity] [decimal](9, 3) NOT NULL,
[TotalAmount] [bigint] NOT NULL,
-- Additional columns omitted
CONSTRAINT [PK_Transactions] PRIMARY KEY CLUSTERED
(
[Id] ASC
) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[Transactions] WITH CHECK ADD CONSTRAINT [FK_Transactions_Products] FOREIGN KEY([ProductId])
REFERENCES [dbo].[Products] ([Id])
И таблица CCTransactions
.
CREATE TABLE [dbo].[CCTransactions](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ProductId] [int] NOT NULL,
[TimeStamp] [datetime] NOT NULL,
[Quantity] [decimal](9, 3) NOT NULL,
[TotalAmount] [bigint] NOT NULL,
-- Additional columns omitted
CONSTRAINT [PK_CCTransactions] PRIMARY KEY CLUSTERED
(
[Id] ASC
)
) ON [PRIMARY]
ALTER TABLE [dbo].[CCTransactions] WITH CHECK ADD CONSTRAINT [FK_CCTransactions_Products] FOREIGN KEY([ProductId])
REFERENCES [dbo].[Products] ([Id])
Мне нужен запрос, который UNION ALL
содержит все Transactions
и CCTransactions
, попадающие в заданный диапазон дат, а затем группирует их какProduct.Id
, Product.Title
, SUM(Quantity)
, SUM(TotalAmount)
.
Ниже приведено то, что я имею до сих пор.Это не скомпилируется, но я в том числе, потому что люди обычно хотят видеть то, что вы пробовали.Он говорит мне:
Сообщение 8120, Уровень 16, Состояние 1, Строка 5
Столбец «Products.Id» недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни впредложение GROUP BY.
Сообщение 209, Уровень 16, Состояние 1, Строка 14
Неоднозначное имя столбца 'Id'.
Я понимаю ошибки, но не уверен, что лучшечтобы исправить их.Похоже, запрос работал до того, как я добавил объединение.
DECLARE @dtStart DATE = '2016-08-01';
DECLARE @dtEnd DATE = '2016-08-31';
SELECT p.Id, p.Title, SUM(t.Quantity), SUM(t.TotalAmount) AS Amount
FROM Transactions t
INNER JOIN Products p ON t.ProductId = p.Id
WHERE t.[TimeStamp] >= @dtStart AND CAST(t.[TimeStamp] AS DATE) <= @dtEnd
UNION ALL
SELECT p.Id, p.Title, SUM(t.Quantity), SUM(t.TotalAmount) AS Amount
FROM CCTransactions t
INNER JOIN Products p ON t.ProductId = p.Id
WHERE t.[TimeStamp] >= @dtStart AND CAST(t.[TimeStamp] AS DATE) <= @dtEnd
GROUP BY p.Id, p.Title
ORDER BY Title