Задать вопрос
  • Почему не работает LIKE при поиске в бд?

    @ViaCom
    SELECT *
    FROM table
    WHERE  comment COLLATE Cyrillic_General_CI_AS
     LIKE '%к%' COLLATE Cyrillic_General_CI_AS

    все поля приведите к одному коллейту
    Ответ написан
  • Можно ли построить такой запрос на sql?

    @ViaCom
    Увы я не пишу на мускуле, потому пример для MS SQL
    но полагаю с минимальными правками он будет работать и на мускуле.
    drop table if exists t1;
    create table t1
    (Id int primary key, Parent_Id int, code nvarchar(10), TextValue nvarchar(max));
    -- Если у стаьи с разной версионностью есть набор полей (или одно поле, у меня это CODE)
    -- Которые гарантированно уникальны, тогда все много проще
    
    insert into t1(Id, Parent_Id, code, TextValue) values (1,0, 'Message', 'The variant');
    insert into t1(Id, Parent_Id, code, TextValue) values (2,1, 'Message', 'The variant.');
    insert into t1(Id, Parent_Id, code, TextValue) values (3,2, 'Message', 'Variant.');
    insert into t1(Id, Parent_Id, code, TextValue) values (4,0, 'Letter', 'Hi dear Kat');
    insert into t1(Id, Parent_Id, code, TextValue) values (5,4, 'Letter', 'Hi Kat');
    
    -- запрос обычный вложенный
    select * from t1 a 
    join (select code, max(Parent_Id) Parent_Id from t1 group by code )b 
    on a.code = b.code and a.Parent_Id = b.Parent_Id;
    -- но если появляется такой "колобок" как описано ниже
    -- у нас колобок с Id 6 и колобок с Id 8 это последнии 
    -- ревизии разных статей с одним кодом.
    insert into t1(Id, Parent_Id, code, TextValue) values (6,0, 'Kolobok', 'K1');
    insert into t1(Id, Parent_Id, code, TextValue) values (7,0, 'Kolobok', 'K2');
    insert into t1(Id, Parent_Id, code, TextValue) values (8,7, 'Kolobok', 'K3');
    -- тогда запрос выйдаст не красивый результат
    select * from t1 a 
    join (select code, max(Parent_Id) Parent_Id from t1 group by code )b 
    on a.code = b.code and a.Parent_Id = b.Parent_Id;
    
    -- нужно делать иерархический запрос, например такой.
    with z (Kod, id, parent_id, code, TextValue) as 
    (
    	select Kod=a.id, a.id, a.parent_id, a.code, a.TextValue from t1 a where parent_id = 0
    	union all 
    	select z.Kod, a.id, a.parent_id, a.code, a.TextValue from t1 a
    	join z on a.Parent_Id = z.id
    )
    select z.* from z join (select Kod, id = max(id) from z group by Kod ) x on z.Id = x.id;
    Ответ написан
  • Как сделать выборку уникальных значений столбца postgres?

    @ViaCom
    1. Скорее всего у вас ошибка в логике.
    Если скорее всего в одном городе может быть НЕСКОЛЬКО моделей (и теоретически регионов хотя это было бы и не логично), потому вам нужно выбрать КОНКРЕТНУЮ модель.
    2. Всесто Distinct используйте group by.
    select max(model_id) as model_id, city_id, max(region_id) as region_id
    from articles  a join models m on a.model_id = m.id 
    group by  city_id
    Ответ написан
    Комментировать
  • Текстовый редактор для mac?

    @ViaCom
    Ответ написан
    Комментировать
  • Как суммировать значение ячеек из выбранных столбцов DataGridView в Label?

    @ViaCom
    Ну коли топик в TSQL тогда и ответ в нем

    declare @s nvarchar(max) = ''
    select @s = @s + Your_String_Column from Your_Table
    select @s


    Сие можно обернуть в функцию или процедуру ... уже как угодно
    Ответ написан
  • Как вызвать динамический запрос в функции Mssql?

    @ViaCom
    Никак. Но вопрос зачем нужна именно функция. Чем продиктована такая необходимость? Почему не процедура?
    Если совсем приперло, тогда CLR
    Ответ написан
  • Задача из "Как я завалил собеседование в Twitter", как показать заполнение водой?

    @ViaCom
    Неожиданно на tsql
    Лень было писать pivot динамический, и число строк равно числу столбцов, опять же из ленности.
    Задачка увы не решилась одним запросом так как CTE в памяти формируется по новой каждый раз, когда мы с ним соединяемся в предложении from. Если бы не необходимость сгенерировать столбики рандомно, можно было бы в один запрос написать.
    declare @m int = 16
    drop table if exists #n
    ;with z(n, c1, c2) as 
    (
    	select 
    		 n  = 1
    		,c1 = a.c
    		,c2 = a.c
    	from (select replicate(N'■', abs(checksum(newid())) % @m) c ) a
    	union all 
    	select 
    		 a.n1
    		,a.c2
    		,a.c2 + isnull(replicate(N'□', len(a.c1)-len(a.c2)) ,N'')
    	from 
    	(
    		select 
    			 n1 = n+1
    			,c1 = z.c2
    			,c2 = replicate(N'■', abs(checksum(newid())) % @m ) 
    		from z where n < @m
    	) a
    ) 
    select * into #n from z 
    order by n desc
    option (maxrecursion 100)
    
    select left(c2,l) from #n z1
    cross apply (select max(len(c1)) l from #n z2 where z2.n >= z1.n) x
    order by n

    И результат
    5aa50aeef132c325622342.jpeg
    Ответ написан
    Комментировать