Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
Tests.Directory_id = '''+@id+''') |
||
6 ноя 14, 14:21 [16806184] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11562 |
а может не надо такое делать в SQL? у вас же есть Excel, там всё это замечательно делается через drag-n-drop в Pivot, главное подготовить правильно большую плоскую табличку со всей детализацией |
6 ноя 14, 14:23 [16806196] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
пипл хатит хардкора и @#$ли - не надо его останавливать |
||
6 ноя 14, 14:29 [16806246] Ответить | Цитировать Сообщить модератору |
rpe4a Member Откуда: Пермь Сообщений: 110 |
Glory, спасибо, думаю уже усталость сказывается, поправил, еще ошибки сейчас исправлю. |
6 ноя 14, 14:46 [16806428] Ответить | Цитировать Сообщить модератору |
rpe4a Member Откуда: Пермь Сообщений: 110 |
o-o и Glory, спасибо. Это я уже заработался просто, все ровно там ошибка.
|
||
6 ноя 14, 15:10 [16806651] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Ошибка "неправильный синтаксис" лечится использованием правильного, документированного синтаксиса В вашем случае на строке 18 вашего запроса |
||
6 ноя 14, 15:13 [16806676] Ответить | Цитировать Сообщить модератору |
rpe4a Member Откуда: Пермь Сообщений: 110 |
Konst_One, светлый ум у вас, я предлагал, сказали, что это дилетантство. |
6 ноя 14, 15:17 [16806714] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
rpe4a, вместо EXEC сделайте своей собранной строке PRINT, потом ее в студию в окно засуньте и на кнопку PARSE нажмите (иконка галочка) укажет, в каком именно месте ошибка, не разберетесь, вываливайте сюда. ЦЕЛИКОМ! |
6 ноя 14, 15:39 [16806872] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11562 |
почему ? нормальное решение для автоматизации. зачем давать серверу не свойственные ему задачи, пусть этим клиентское ПО занимается. |
||
6 ноя 14, 15:39 [16806876] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
да все потому. что когда сами дилетатны, то других этим и обзывают. давно уже так и повсюду. а если до вас не докатилось, то радуйтесь. |
||||
6 ноя 14, 15:46 [16806914] Ответить | Цитировать Сообщить модератору |
rpe4a Member Откуда: Пермь Сообщений: 110 |
o-o, вы даже не представляете, вот рабочий вариант, забыл
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX) DECLARE @ColumnName AS NVARCHAR(MAX) declare @id nvarchar(max) = 'BE4DB2CE-C95D-E411-9FEA-00215AA6C898' SELECT @ColumnName= ISNULL(@ColumnName + ',','') + QUOTENAME(Question_id) FROM (SELECT DISTINCT UserQuestions.Question_id FROM UserQuestions where UserQuestions.UserTest_id in (select UserTest_id from UserTests where UserTests.Directory_Test_id = @id)) AS Courses; --select @ColumnName set @DynamicPivotQuery = N'select FIO, '+@ColumnName+' from ( select --Directory_name as DirectoryName Users.User_surname + users.User_name + Users.User_patronymic as FIO --,Org_name as ORG ,UserTests.UserTest_id as UserTestID --,UserQuestions.Question_id as QuestionId --,REPLACE(UserQuestions.Question_content, char(10), '') as [Вопрос] ,cast(UserQuestions.Question_isTrue as decimal (5,2)) as result --,cast(sum(UserQuestions.Question_isTrue) over (partition by UserTests.UserTest_id) as decimal (5,2)) as TotalResult FROM [attestation].[dbo].[Directories] inner join Tests on Directories.Directory_id = Tests.Directory_id inner join UserTests on UserTests.Directory_Test_id = Tests.Directory_id inner join Users on Users.User_id = UserTests.User_id inner join Orgs on Orgs.Org_id = Users.Org_id inner join UserQuestions on UserQuestions.UserTest_id = UserTests.UserTest_id where Tests.Directory_id = '''+@id+''') as x pivot ( max(result) for UserTestID in ('+@ColumnName+') ) as pvt' execute (@DynamicPivotQuery) еще бы данные выводились, чето не выводятся, ну хотя бы по столбцам разбиваются. :) Значит на верном пути! |
||
6 ноя 14, 16:03 [16807046] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вы бы сначала просто написали работающий запрос. А потом бы уже ударялись в дебри динамики А то у вас вон под 'BE4DB2CE-C95D-E411-9FEA-00215AA6C898' декларируется переманная с максм.размером 2Гб |
||
6 ноя 14, 16:07 [16807079] Ответить | Цитировать Сообщить модератору |
rpe4a Member Откуда: Пермь Сообщений: 110 |
Glory, а по подробнее про декларирование переменных? Первый раз слышу такое... |
7 ноя 14, 07:32 [16809885] Ответить | Цитировать Сообщить модератору |
rpe4a Member Откуда: Пермь Сообщений: 110 |
Доброе всем утро, кажись получилось. Вот скрипт:DECLARE @DynamicPivotQuery AS NVARCHAR(MAX) DECLARE @ColumnName AS NVARCHAR(MAX) declare @id nvarchar(max) = 'BE4DB2CE-C95D-E411-9FEA-00215AA6C898' SELECT @ColumnName= ISNULL(@ColumnName + ',','') + QUOTENAME(Question_id) FROM (SELECT DISTINCT UserQuestions.Question_id FROM UserQuestions where UserQuestions.UserTest_id in (select UserTest_id from UserTests where UserTests.Directory_Test_id = @id)) AS Courses; --select @ColumnName set @DynamicPivotQuery = N'select DirectoryName, FIO, ORG,CountQuestion,TotalResult,TotalPercent,'+@ColumnName+' from ( select Directory_name as DirectoryName ,Users.User_surname +'' ''+ users.User_name +'' ''+ Users.User_patronymic as FIO ,Org_name as ORG ,UserTests.UserTest_id as UserTestID ,UserQuestions.Question_id as QuestionId --,REPLACE(UserQuestions.Question_content, char(10), '') as [Вопрос] ,cast(UserQuestions.Question_isTrue as decimal (5,2)) as result ,cast(sum(UserQuestions.Question_isTrue) over (partition by UserTests.UserTest_id) as decimal (5,2)) as TotalResult ,cast(count(UserQuestions.Question_isTrue)over (partition by UserTests.UserTest_id) as decimal (5,2)) as CountQuestion ,cast((sum(UserQuestions.Question_isTrue) over (partition by UserTests.UserTest_id)) * 100 / (count(UserQuestions.Question_isTrue)over (partition by UserTests.UserTest_id)) as decimal(5,2)) as TotalPercent FROM [attestation].[dbo].[Directories] inner join Tests on Directories.Directory_id = Tests.Directory_id inner join UserTests on UserTests.Directory_Test_id = Tests.Directory_id inner join Users on Users.User_id = UserTests.User_id inner join Orgs on Orgs.Org_id = Users.Org_id inner join UserQuestions on UserQuestions.UserTest_id = UserTests.UserTest_id where Tests.Directory_id = '''+@id+''') as x pivot ( max(result) for QuestionId in ('+@ColumnName+') ) as pvt' execute (@DynamicPivotQuery) print(@DynamicPivotQuery) ну и соответственно результат:
Вроде бы все гуд, подскажи может я, что пропустил? И да огромное спасибо за советы, ссылки и решения! |
|||
7 ноя 14, 08:10 [16809926] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Т.е. вы пишите команды вида declare @id nvarchar(max) = 'BE4DB2CE-C95D-E411-9FEA-00215AA6C898', вообще незная, что это и для чего нужно ? |
||
7 ноя 14, 09:23 [16810086] Ответить | Цитировать Сообщить модератору |
rpe4a Member Откуда: Пермь Сообщений: 110 |
Знаю declare объявить переменную далее @имя переменной потом тип переменной. Как в учебнике написано, так и пишу... что тут такого? Возможно вас смущает (max)? Тогда поясните мне в чем проблема, буду рад выслушать ;) Как я понимаю видимо она несет в себе как раз что-то про 2 гб о которых вы говорите? |
||
7 ноя 14, 09:40 [16810155] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А самому прочитать "как в учебнике написано" ? Или вы просто не знаете никаких других типов данных,кроме nvarchar(max) ? |
||
7 ноя 14, 09:44 [16810177] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47048 |
Glory, это всё правильно, да... Автор ещё не представляет значение буквы N в тексте, который он пишет. И поэтому не пишет эту волшебную букву во многих нужных местах. Но в данном случае смысл в объявлении переменной именно этого типа всё же есть. Ведь иначе будет неявное конвертирование для EXECUTE(), который принимает параметр именно типа NVARCHAR(MAX). |
7 ноя 14, 09:49 [16810191] Ответить | Цитировать Сообщить модератору |
rpe4a Member Откуда: Пермь Сообщений: 110 |
Ну сейчас я полезу в учебник, который я читал полгода назад. ;)
толи вы самоутвердиться хочете, толи что? К вашеу горю знаю, но раз уж вы завели речь о этой nvarchar(max), а я нашел пробел в своих знаниях, можно вас попросить разъяснить в чем тут соль? |
||||
7 ноя 14, 09:57 [16810238] Ответить | Цитировать Сообщить модератору |
rpe4a Member Откуда: Пермь Сообщений: 110 |
iap,
В чем ее сила бро? :)
Дак у меня так и написано или нет? |
||||
7 ноя 14, 09:59 [16810253] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Соль в том, что вы не знаете про типы данных практически ничего. Даже, например, про размеры переменных того или иного типа. |
||
7 ноя 14, 10:00 [16810256] Ответить | Цитировать Сообщить модератору |
rpe4a Member Откуда: Пермь Сообщений: 110 |
Возможно, мне интересно про 2 гб мистических, что значит если я объявляю переменную NVARCHAR(MAX) то под нее мне отводиться 2 гб памяти или как? это ведь не означает что declare @id nvarchar(max) = 'BE4DB2CE-C95D-E411-9FEA-00215AA6C898' весит 2 гб? |
||
7 ноя 14, 10:06 [16810281] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
В учебнике этого не написано ? Или вы не дочитали еще до этого места ? |
||
7 ноя 14, 10:08 [16810288] Ответить | Цитировать Сообщить модератору |
rpe4a Member Откуда: Пермь Сообщений: 110 |
Glory, отвечая вопросом на вопрос мы не придем к консенсус, почитав хотя бы вики
Что плохого в том, что я объявляю переменную с типом nvarchar(max), я просто не хочу замарачиваться и высчитывать сколько мне там надо символов будет... ставлю сразу max и все... хранить то ясно, что там 2 гб инфы мне не придвидится... |
||
7 ноя 14, 10:59 [16810499] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Где "там" ? В Tests.Directory_id ? Т.е. вы вообще все свой переменным всегда будете объявлять nvarchar(max) ?
Ну так это вы тут начали вопросы задавать, как будто на курсах - расскажите мне про то, расскжите мне про это |
||||
7 ноя 14, 11:05 [16810524] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |