Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Перечисление значение через запятую

Господа,сызнова я.
Запрос
select prdl_description as [Товар],b.prd_PrimaryCode as [Код товара],g.untl_Description [Упковка],cast(d.spt_Quantity as float (6)) as [Количество], h.loc_Code as [Ячейка],j.aba_BuildingCode as [Участок]
from LV_ProductLang a
join LV_Product b on convert(varchar(8),b.prd_ID) = a.prdl_ProductID
join LV_Stock c on c.stk_ProductID = b.prd_ID
join LV_StockPackType d on d.spt_StockID = c.stk_ID
join LV_ItemUnit e on e.itu_ID = d.spt_ItemUnitID
join LV_Unit f on f.unt_ID = e.itu_UnitID
join LV_UnitLang g on g.untl_UnitID = f.unt_ID
join LV_Location h on h.loc_ID= c.stk_LocationID
join ANT_BuildingAttributes j on j.aba_BuildingID = h.loc_BuildingID

where b.prd_PrimaryCode = '094758' or b.prd_PrimaryCode = '090671' and g.untl_LanguageID = 4
--and h.loc_Code = 'PHseti'

Выдает

Товар Код товара У паковка Кол-во уп Ячепйка Участок
Бумага "Maestro E 94758 Boxes 4260 RB100 PH
Бумага "Maestro Extra 94758 Boxes 4260 RB100 PH
Бумага "Maestro Extr 94758 Коробка(и) 4260 RB100 PH
Бумага "Maestro Ext2% 94758 Коробка(и) 4260 RB100 PH

Вопрос N1
Мне нужно перечислить много ячеек, поле b.prd_PrimaryCode можго ли это сделать как-то через запятую?
2-й вопрос, если я ставлю OR,то не отрабатывает условие g.untl_LanguageID = 4 (оно отвечает за то, чтобы упаковки были на русском языке). Если я убираю OR,т.е. оставляю только 1 товар, то все прекрасно работает.
Или как-то можно совместить корректно OR и AND?
Ответ:
iap
Konst_One
b.prd_PrimaryCode IN( '094758', '090671' )
Или
(b.prd_PrimaryCode = '094758' or b.prd_PrimaryCode = '090671') and g.untl_LanguageID = 4
ибо and приоритетнее or


Ага..ща опробую
Спасибо
Вопрос: Как создать подзапрос, возвращающий список значений через запятую

Добрый день, коллеги
Есть 2 таблицы: студенты (Stud) IdStud int, NameStud char(20) и их оценки (Mark): IdStud int, MarkStud tinyint
Помогите создать запрос, возвращающий список студентов + их оценки одной строкой через запятую
Результат должен быть типа:
Иванов '4, 5, 3'
Петров '3, 4'
Сидоров '5, 5, 4, 4'
Предполагаю, что нужно составить как то подзапрос, возвращающий список оценок одной строкой.
А как его составить не знаю. Помогите!
Пробовал использовать в основном Select пользовательскую функцию SQL, возвращающую строку со списоком оценок по IdStud. В функции курсор перебирает оценки студента, формируется строка со списком через запятую, и возвращается в основной Select. Но как выяснилось, курсоры можно использовать только в хранимых процедурах.
Ответ: Спасибо!
Вопрос: Проверка значения и обновление

Привет всем, прощу совета.
Есть таблица1 в ней есть поле var_char называется "groups" в котором есть значения через запятую к примеру "4,7,2"
еще в этой же таблице есть поле "email" в нем естественно хранятся электронные адреса..

Есть таблица2 в ней есть поле к примеру email2, в ней хранится список адресов.

Нужно в поле groups добавить значение 9 для всех записей у которых почта совпадает с списком адресов из таблица2, что бы получилось что то типа "4,7,2,9" предварительно проверив нет ли там уже этого значения (9).

записей в таблице1 где то 30000, записей в таблице2 где то 10000

Можно это как то сделать средствами мускула?
Мне пока что приходит в голову только банальный цикл по базе данных и выполнение в цикле последовательности SELECT и UPDATE..
Ответ:
kak2z
Привет всем, прощу совета.
Есть таблица1 в ней есть поле var_char называется "groups" в котором есть значения через запятую к примеру "4,7,2"
еще в этой же таблице есть поле "email" в нем естественно хранятся электронные адреса..

Есть таблица2 в ней есть поле к примеру email2, в ней хранится список адресов.

Нужно в поле groups добавить значение 9 для всех записей у которых почта совпадает с списком адресов из таблица2, что бы получилось что то типа "4,7,2,9" предварительно проверив нет ли там уже этого значения (9).

записей в таблице1 где то 30000, записей в таблице2 где то 10000

Можно это как то сделать средствами мускула?
Мне пока что приходит в голову только банальный цикл по базе данных и выполнение в цикле последовательности SELECT и UPDATE..



...можно... для проверки, где-то в FAQ есть тема
как выделять значения из списка через запятую.

Учтите, как и сказали все предыдушие ораторы -- ето плохой дезайн,
вы с ним намучаетесь...
Вопрос: Перечисление строк через запятую в запросе с группировкой

Добрый день!

Необходимо при выводе запроса сгрупировать список по полю ID договора, при этом значения поля Зав № уплотнения записывались бы в одну строку.

При запуске запроса выдаёт ошибку: 3464, Несоответствие типов данных в выражении условия отбора.

Поле ID договора типа счётчик (Предполагаю именно здесь конфликт, но не могу переделать)
Поле Зав № уплотнения типа текстовое

Помогите разобраться с кодом.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Function NewProject(str_ID_договора As String) As String
 
Dim rst As DAO.Recordset
Dim rt
Dim str_itog As String
Dim str_sql
 
str_sql = "SELECT  Запрос2.[Зав № уплотнения] FROM Запрос2 WHERE Запрос2.[ID договора]='" & str_ID_договора & "';"
 
Set rst = CurrentDb.OpenRecordset(str_sql)
rst.MoveFirst
 
Do While rst.EOF = False
    If str_itog = "" Then
        str_itog = rst![Зав № уплотнения]
    Else
        str_itog = str_itog & ", " & rst![Зав № уплотнения]
    End If
rst.MoveNext
Loop
NewProject = str_itog
 
End Function
Ответ: snipe, Огромнейшее СПАСИБО
Очень приятно, что есть отзывчивые люди
Вопрос: Вывести данные которые через запятую

В таблице есть данные, которые через запятую, как их вывести в столбик.

Например
MySQL
1
SELECT film_genre FROM `films` ORDER BY `id` DESC
А в film_genre записи идут как драма, мелодрама, фэнтези | триллер, детектив, ужасы и так далее.

Вывод такой сейчас:

film_genre
детектив, криминал, драма, комедия
комедия, музыка
триллер, драма
фэнтези, боевик, драма, военный
боевик, триллер, драма, комедия, криминал
драма, криминал
триллер, детектив, ужасы
драма, мелодрама, фэнтези
комедия, приключения, фэнтези
триллер
фантастика, триллер
триллер
драма, мелодрама, комедия
фантастика, боевик, триллер
триллер, криминал
триллер, военный, история
фэнтези, мелодрама, драма
комедия, мелодрама
драма, детектив
драма, биография
драма, криминал
комедия, приключения
мелодрама, детектив
фэнтези, драма, мелодрама
фэнтези, драма, мелодрама

А мне надо:

мелодрама
драма
фэнтези
комедия
приключения

И так далее.
Ответ:
MySQL
1
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(film_genre,',', 1),',', -1) AS genre FROM films
Вот такой конструкций получил желаемое.

Далее просто добавляем
MySQL
1
SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(film_genre,',', 1),',', -1) AS genre FROM films
и получим результат который не будет дублировать значения.
Вопрос: вернуть значения функции в виде текста через запятую

функция запускает некоторый склеенный текст запроса
раньше использовали тип refcursor

сейчас надо поменять на перечисление через запятую


как сделать?
Ответ:
tadmin
string_agg(ppp,',')

спасибо tadmin
Вопрос: SELECT значений поля через запятую с группировкой по другому полю

Есть таблица с полями
User_ID
L_ID

Надо кинуть в другую таблицу 2 поля - User_ID и соответствующие ему L_ID через запятую. Т.е. сгруппированные, на каждого юзера 1 строчка.

Нашла тут на форуме пример запроса, который перечисляет айдишки через запятую, все работает,

select cast(L_ID as varchar) + char(13)+char(10) from @T for xml path('')


но не соображу, как сгруппировать по второму полю. Подскажите, пожалуйста.
Ответ:
aleks2
Критик хренов
Привет, Алекс!
Вопрос: Получить значение для ID перечисленных через запятую

Есть таблица, в которой поле содержит значения ID-шников через запятую, необходимо эти ID использовать для связи имени по ID из другой таблицы. Как такое можно сделать?
Т.е. например у нас есть таблица Пары в которой есть поле Группы, где содержится: "21, 24, 54" (т.е. поток групп), далее есть таблица групп, где каждому ID соответствует имя группы. Как можно их связать?
Ответ: для начала тебе НЕ НУЖНО так делать "21, 24, 54". У тебе должна быть таблица в которой ты будеш отдельными записями хранить связи между Парами и Групами, а делее join-а будет достаточно.

вот например: Oracle
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT *
FROM
    (
        SELECT 'group1' AS "name", '1' AS "id" FROM dual UNION
        SELECT 'group5' AS "name", '5' AS "id" FROM dual UNION
        SELECT 'group20' AS "name", '20' AS "id" FROM dual UNION
        SELECT 'group21' AS "name", '21' AS "id" FROM dual UNION
        SELECT 'group24' AS "name", '24' AS "id" FROM dual UNION
        SELECT 'group54' AS "name", '54' AS "id" FROM dual
    
    ) "groups"
WHERE
    TRIM("groups"."id") IN ( 
        SELECT  TRIM(regexp_substr('21,24,54','[^,]+',1,level)) FROM dual
        CONNECT BY regexp_substr('21,24,54','[^,]+',1,level) IS NOT NULL);
Вопрос: Поиск данных через запятую

Доброе время суток!. Нужна консультация. Как сделать поиск данных по нескольким значениям в одном поле одновременно? Допустим есть поле ФИО. Пользователь может вводить в это поле ФИО клиента через запятую, количество не известно, короче n-ое. Тут как я понял нужно парсить? Или использовать динамический массив? По возможности можно примерчик. Спс!
Ответ:
Askat
regexp_ классная штука
RTFM
Вопрос: Как задать несколько значении во входящий параметр хр.процедуры

Есть хранимая процедура, где:
PROCEDURE bs.pr(IN wprid VARCHAR(255))

Там есть запрос:
SELECT ...
WHERE prID IN (wprid)

Когда во входящем параметре задаю только одно значение, например: 2552 , запрос выполняется без проблем. А когда задаю два значения через запятую, например: 2552,2553 , ничего не выводит.
А если задаваемые значения вручную прописать в запрос, например:
SELECT ...
WHERE prID IN ('2552','2553')
, то все прекрасно выводится.

Как правильно задать несколько значении во входящий параметр?
Ответ: Никак.

Написать курсор на запрос SELECT, пройтись по курсору и в теле цикла
вызывать нужную процедуру несколько раз.

Процедуру переделать
PROCEDURE bs.pr(IN wprid int(255))

SELECT ...
WHERE prID = wprid

То, что ты хочешь, можно делать через динамический EXEC (операторы PREPARE STATEMENT и EXEC)
но это не всегда правильный подход. В данном случае я считаю совсем нет смысла его использовать.