Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 PIVOT синтаксис  [new]
Vader94
Member

Откуда:
Сообщений: 4
Здравствуйте!
Было задание написать скрипт, создающий таблицы+делающий необходимую выборку. Собственно, задание во вложении.
Скрипт вроде написала, с первой частью справляется, а вот с запросом у меня конкретная ошибка в синтаксисе... Поможете?

CREATE TABLE Prodaji (
Nomer integer primary key,
Data date,
Prodavets character (15) not null,
Magazin integer)

CREATE TABLE Zakazi (
Nomer integer not null,
Product character (15) not null,
Col-vo integer,
primary key (Nomer),
foreign key Nomer references Prodaji on delete cascade)

SELECT SUM (Col-vo)
FROM Prodaji, Zakazi
WHERE Nomer.Prodaji = Nomer.Zakazi
AND datacolumn BETWEEN "01.03.2013" AND "31.03.2013"
GROUP BY Nomer.Prodaji
PIVOT Prodavets.Prodaji

К сообщению приложен файл. Размер - 84Kb
27 мар 14, 15:42    [15795564]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT синтаксис  [new]
Glory
Member

Откуда:
Сообщений: 104760
http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
27 мар 14, 15:43    [15795578]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT синтаксис  [new]
Vader94
Member

Откуда:
Сообщений: 4
Glory,

спасибо большое, но не могли вы бы конкретно указать на ошибку? Потому что перебирала я миллион вариантов, ни один не подошел...
27 мар 14, 17:01    [15796173]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT синтаксис  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Vader94
Glory,

спасибо большое, но не могли вы бы конкретно указать на ошибку? Потому что перебирала я миллион вариантов, ни один не подошел...
Я могу указать.
Синтаксис запроса с PIVOT у вас конкретно так (даже рядом) не соблюден. Разбирайтесь с синтаксисом.
27 мар 14, 17:18    [15796276]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT синтаксис  [new]
Vader94
Member

Откуда:
Сообщений: 4
Minamoto,

Спасибо! А такой вариант лучше будет?
CREATE TABLE Prodaji (
Nomer integer primary key,
Data date,
Prodavets character (15) not null,
Magazin integer)

CREATE TABLE Zakazi (
Nomer integer not null,
Product character (15) not null,
Col-vo integer,
primary key (Nomer),
foreign key Nomer references Prodaji on delete cascade)

SELECT 'Col-vo' AS Colvo_prodannogo_tovara, [a], [b], [c]
FROM
(SELECT Product, Col-vo, Nomer FROM Prodaji, Zakazi WHERE Prodaji.Nomer=Zakazi.Nomer) AS SourceTable
PIVOT
(
AVG(Col-vo)
FOR Col-vo IN ([a], [b], [c])
) AS PivotTable;
27 мар 14, 18:09    [15796610]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT синтаксис  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Vader94
Minamoto,

Спасибо! А такой вариант лучше будет?
CREATE TABLE Prodaji (
Nomer integer primary key,
Data date,
Prodavets character (15) not null,
Magazin integer)

CREATE TABLE Zakazi (
Nomer integer not null,
Product    character (15) not null,
Col-vo integer,
primary key (Nomer),
foreign key Nomer references Prodaji on delete cascade)

SELECT 'Col-vo' AS Colvo_prodannogo_tovara, [a], [b], [c]
FROM
(SELECT Product, Col-vo, Nomer FROM Prodaji, Zakazi WHERE Prodaji.Nomer=Zakazi.Nomer) AS SourceTable
PIVOT
(
AVG(Col-vo)
FOR Col-vo IN ([a], [b], [c])
) AS PivotTable;


Чуть лучше, но все же
FOR

[<column that contains the values that will become column headers>]


То есть вместо FOR Col-vo надо FOR Product поставить.

Ну и поправить остальные синтаксические ошибки, попробовав выполнить код в Management Studio, или, если ее нет под рукой, вот тут: http://sqlfiddle.com
27 мар 14, 18:22    [15796687]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT синтаксис  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Vader94, да, и еще с агрегационной функцией промашка - нужна сумма продаж в месяце, а не среднее количество среди продаж.
27 мар 14, 18:27    [15796707]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить