Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Нужно транспонировать таблицу
|
|||
|---|---|---|---|
|
#18+
Добрый день! есть две таблицы: 1) Таблица скидок [Id_param] - id скидки [Name] - название скидки CREATE TABLE Params ( [Id_param] smallint IDENTITY(1,1) not null, [Name] nvarchar(50) not null CONSTRAINT Id_params PRIMARY KEY CLUSTERED ( [Id_param] ASC ) ) INSERT Params (Name) values('Скидка Пенсионер') INSERT Params (Name) values('Скидка прекрасного дня') INSERT Params (Name) values('Скидка Счастливчик') INSERT Params (Name) values('Скидка здравствуй') 2)Таблица товаров [id_object] - id товара [id_param] - скидки [cdate] - дата действия скидки [value] цена товара CREATE TABLE objects_params ( [id_object] int IDENTITY(1,1) not NUll, [id_param] smallint NUll, [cdate] smalldatetime not NUll, [value] float not NUll )ON [PRIMARY] ALTER TABLE objects_params WITH CHECK ADD CONSTRAINT FK_Id_params FOREIGN KEY([Id_param]) REFERENCES Params ([Id_param]) GO SET IDENTITY_INSERT objects_params ON DECLARE @cnt INT = 0; DECLARE @datetime smalldatetime = '2018-01-01 00:00:00'; DECLARE @id_object INT = 1; WHILE @cnt < 50 BEGIN INSERT objects_params ([id_object], [id_param],[cdate],[value]) values ( floor(13*RAND()+1),case when floor(4*RAND()+1)>3 then Null else floor(4*RAND()+1) end ,@datetime,cast(floor(1000*RAND()+1)*RAND() as decimal(8,2)) ) SET @cnt = @cnt + 1; SET @datetime = DATEADD(day,cast(@datetime as int),1) set @id_object=@id_object+1 END; Нужно найти для всех товаров актуальные цены на заданный период дат. Актуальной ценой считается последняя полученная цена. Написал запрос, но как сделать для произвольных скидок, без case? SELECT [id_object] ,sum("Скидка Пенсионер") as "Скидка Пенсионер" ,sum("Скидка прекрасного дня") as "Скидка прекрасного дня" ,sum("Скидка Счастливчик") as "Скидка Счастливчик" ,sum("Скидка здравствуй") as "Скидка здравствуй" FROM ( SELECT [id_object] ,case when name = 'Скидка Пенсионер' and MAX(s.cdate) over (partition by [id_object] )= s.cdate then value else 0 end as "Скидка Пенсионер" ,case when name = 'Скидка прекрасного дня' and MAX(s.cdate) over (partition by [id_object] )= s.cdate then value else 0 end as "Скидка прекрасного дня" ,case when name = 'Скидка Счастливчик'and MAX(s.cdate) over (partition by [id_object] )= s.cdate then value else 0 end as "Скидка Счастливчик" ,case when name = 'Скидка здравствуй' and MAX(s.cdate) over (partition by [id_object] )= s.cdate then value else 0 end as "Скидка здравствуй" FROM objects_params as s left JOIN Params as p on s.[id_param]=p.[id_param] WHERE cast(s.cdate as date) between '2018-01-02' and '2018-01-05' ) as s group by [id_object] Пытался использовать динамический sql c pivot, но то что я пишу не работает Помогите, пожалуйста! Помогите, пожалуйста, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2018, 14:43 |
|
||
|
Нужно транспонировать таблицу
|
|||
|---|---|---|---|
|
#18+
Takashi, а вы mysql от ms sql не отличаете? Модератор: Тема перенесена из форума "MySQL". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2018, 16:44 |
|
||
|
Нужно транспонировать таблицу
|
|||
|---|---|---|---|
|
#18+
попробовал реализовать динамический запрос, но выдаёт ошибку Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Сообщение 137, уровень 15, состояние 2, строка 153 Необходимо объявить скалярную переменную "@id_param". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2018, 21:13 |
|
||
|
Нужно транспонировать таблицу
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. Однако, дело не только в этом. В SUM() подзапрос вообще нельзя использовать. Зачем везде натыканы двойные кавычки, если там надо писать пары одинарных? Кстати, кое-где вообще пропущено. И у даты тоже. Это я только про синтаксис, если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2018, 22:01 |
|
||
|
Нужно транспонировать таблицу
|
|||
|---|---|---|---|
|
#18+
Takashi, Добавь перед exec (@sql) команду print @sql И посмотри что за строку сформировал. Отлаживать учись, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2018, 22:08 |
|
||
|
Нужно транспонировать таблицу
|
|||
|---|---|---|---|
|
#18+
iap Код: sql 1. Однако, дело не только в этом. В SUM() подзапрос вообще нельзя использовать. Зачем везде натыканы двойные кавычки, если там надо писать пары одинарных? Кстати, кое-где вообще пропущено. И у даты тоже. Это я только про синтаксис, если что. Как тогда сделать сумму по полю которое получается в подзапросе? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2018, 22:24 |
|
||
|
Нужно транспонировать таблицу
|
|||
|---|---|---|---|
|
#18+
Takashi, получите это ваше name_param не как кусок динамики, а как результат запроса перед динамикой Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2018, 22:31 |
|
||
|
Нужно транспонировать таблицу
|
|||
|---|---|---|---|
|
#18+
ДедушкаTakashi, получите это ваше name_param не как кусок динамики, а как результат запроса перед динамикой Код: sql 1. спасибо! сделал Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2018, 22:48 |
|
||
|
Нужно транспонировать таблицу
|
|||
|---|---|---|---|
|
#18+
изначально я использовал запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. решил прибегнуть к динамическому запросу, но в итоге в каждом case имя параметра указывать всё равно придется, или есть другое решение? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2018, 22:55 |
|
||
|
Нужно транспонировать таблицу
|
|||
|---|---|---|---|
|
#18+
Takashiкак я понимаю pivot поможет если знаешь какие поля.сначала получите нужный вам результат, а потом делайте динамик пивот пример смотрите тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2018, 23:23 |
|
||
|
Нужно транспонировать таблицу
|
|||
|---|---|---|---|
|
#18+
Дедушка, спасибо за наглядный пример, удалось реализовать Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2018, 21:28 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39603832&tid=1690242]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 259ms |
| total: | 383ms |

| 0 / 0 |
