Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

CASE в SQL -запросе

CASE в SQL -запросе
Я
   Игорь_МММ
 
05.06.18 - 19:29
что тут не так:

|Select
    |        TT.UnitPos,
    |        TT.ParentPOS,
    |        TT.TopParentPOS,
    |        TT.CommonPOS,
    |        Nomenclature = 
    |            CASE TT.AccType
    |                    WHEN 0 THEN TT.NomCompl
    |                    ELSE TT.Nomenclature 
    |            END, 
    |        TT.UnitsName,
    |        TT.Article,
 
 
   Franchiser
 
1 - 05.06.18 - 19:30
Так нельзя
   Игорь_МММ
 
2 - 05.06.18 - 19:32
(1) а как можно?
   Franchiser
 
3 - 05.06.18 - 19:32
В SQL нет понятие булеов, переделай чтобы число получилось
   Franchiser
 
4 - 05.06.18 - 19:32
Номенклатуру в case поставь
   Tateossian
 
5 - 05.06.18 - 19:33
Булево 0x00 - это истина, 0х01 - ложь. Тип bit
   Franchiser
 
6 - 05.06.18 - 19:33
Что такое nomenclature? Может тебе надо as  nomenclature
   Franchiser
 
7 - 05.06.18 - 19:34
(5) ок, а нужен ли ему тип бит?
   Игорь_МММ
 
8 - 05.06.18 - 19:35
(3)AccType это число
(6)да, nomenclature - это Алиас
   Franchiser
 
9 - 05.06.18 - 19:36
Тогда равно убери и после case напиши as nomenclature
   Игорь_МММ
 
10 - 05.06.18 - 19:36
+(8) в зависимости от AccType хочу присвоить nomenclature либо
NomCompl либо Nomenclature
 
 Рекламное место пустует
   Tateossian
 
11 - 05.06.18 - 19:37
(7) Не факт, но каков вопрос, таков ответ)
   Игорь_МММ
 
12 - 05.06.18 - 19:38
|Select
    |        TT.UnitPos,
    |        TT.ParentPOS,
    |        TT.TopParentPOS,
    |        TT.CommonPOS,
    |        CASE TT.AccType
    |                    WHEN 0 THEN TT.NomCompl
    |                    ELSE TT.Nomenclature 
    |            END AS Nomenclature, 
    |        TT.UnitsName,
    |        TT.Article,
так?
   Tateossian
 
13 - 05.06.18 - 19:38
(10) Профайлером посмотри, там немного по другому кейс в запросах выглядит
   Franchiser
 
14 - 05.06.18 - 19:39
(11) по ком тип bit нормально передается?
   Franchiser
 
15 - 05.06.18 - 19:40
(12) нет
Case when ... Then ....
When .... Then ...
Else ...
End
   Tateossian
 
16 - 05.06.18 - 19:40
(12) CASE WHEN AccType = 0х00 THEN ... Дальше ОК
   Tateossian
 
17 - 05.06.18 - 19:41
(14) Используй ADO, там АДО.Комманд как текст идет.
   Игорь_МММ
 
18 - 05.06.18 - 19:43
CASE
    |                    WHEN TT.AccType=0 THEN TT.NomCompl
    |                    ELSE TT.Nomenclature 
    |            END AS Nomenclature,

так не взлетает 
(16) а что такое ..х00?
   Franchiser
 
19 - 05.06.18 - 19:44
(17) не понял если я через 1с++ хочу получить тип bit, что я увижу на выходе в recordset ?
   Franchiser
 
20 - 05.06.18 - 19:45
(18) что пишет в msms?
   Franchiser
 
21 - 05.06.18 - 19:46
(18) это если тип bit значит false
   Игорь_МММ
 
22 - 05.06.18 - 19:46
(20) Ошибка при вызове метода контекста (Execute)
по причине:
Произошла исключительная ситуация (0x80004005)
   Franchiser
 
23 - 05.06.18 - 19:48
(22) в msms запусти а не через odbc
   Игорь_МММ
 
24 - 05.06.18 - 19:51
(23) млин, ребята .. что такое msms ?
практически первый раз пишу sql запрос
   youalex
 
25 - 05.06.18 - 20:06
(24) https://msdn.microsoft.com/ru-ru/library/ms166996(v=sql.120)

Оно же квери (наверное, устар.)
   youalex
 
26 - 05.06.18 - 20:07
(25) + ссылка почему-то не аллё.
SQL Server Management Studio
   Franchiser
 
27 - 05.06.18 - 20:07
Microsoft SQL management studio
   Franchiser
 
28 - 05.06.18 - 20:12
(12) покажи весь запрос
   Игорь_МММ
 
29 - 05.06.18 - 20:16
(28)
"Select
    |        TT.UnitPos,
    |        TT.ParentPOS,
    |        TT.TopParentPOS,
    |        TT.CommonPOS,
    |        CASE 
    |                    WHEN TT.AccType=0 THEN TT.NomCompl
    |                    ELSE TT.Nomenclature 
    |            END AS Nomenclature, 
    |        TT.UnitsName,
    |        TT.Article, 
    |       TT.NomenclatureID, 
    |       TT.GroupOper,
    |        TT.Name,    
    |        TT.Count,    
    |        TT.GoodsID,
    |        TT.FurnType, 
    |       TT.GroupName, 
    |       TT.AccMatID, 
    |       TT.AccType, 
    |       TT.AccCount
    |FROM (Select
    |        TElems.UnitPos,
    |        TElems.ParentPOS,
    |        TElems.TopParentPOS,
    |        TElems.CommonPOS,
    |        TNNomenclature.Name AS           Nomenclature,
    |        TNNomenclature.UnitsName AS      UnitsName,
    |        TNNomenclature.Article AS        Article, 
    |       TNNomenclature.ID AS             NomenclatureID, 
    |       TNNomenclature.MatTypeName AS    GroupOper,
    |        TElems.Name AS Name,    
    |        TElems.Count,    
    |        TElems.GoodsID,
    |        TElems.FurnType, 
    |       TNNomenclature.GroupName, 
    |       TAccessories.AccMatID, 
    |       TAccessories.AccType, 
    |       TAccessories.AccCount,
    |        TNN.Name AS           NomCompl,
    |        TNN.Article AS        ArtCompl
    |FROM TElems,TNNomenclature,TAccessories,TNNomenclature AS TNN 
    |WHERE TElems.PriceID=TNNomenclature.ID    AND
    |TElems.UnitPos=TAccessories.UnitPos AND TAccessories.AccMatID=TNN.ID) AS TT";


если CASE убираю - все работает
   youalex
 
30 - 05.06.18 - 20:17
(12) это нормальная(сокращенная) форма Case, так можно и в скуле,и в 1с.  Учти еще, что у тебя в ветках условия должен быть один тип (ну или мог преобразоваться неявно). Составных типов здесь нет)
   Игорь_МММ
 
31 - 05.06.18 - 20:25
(30)

|        CASE
    |                    WHEN 0 THEN 1
    |                    ELSE 2 
    |            END AS Nomenclature,

даже так не проходит
   youalex
 
32 - 05.06.18 - 20:38
(31) а так:  select case 7 when 7 then 1 else 0 end  ?
запускай (27) и смотри там.
   youalex
 
33 - 05.06.18 - 20:40
(31) зы.так и не пройдет, ты операнд потерял, после case.
 
 
   Игорь_МММ
 
34 - 05.06.18 - 20:44
CASE TT.AccType
    |                    WHEN 0 THEN TT.NomCompl
    |                    ELSE TT.Nomenclature 
    |            END AS Nomenclature,

результат тот же
   Franchiser
 
35 - 05.06.18 - 20:49
(29) это устаревшая форма записи: ни одного джойна нет, потом в конце "as Tt" это лишнее, да и скобка открывающая отсутствует
   youalex
 
36 - 05.06.18 - 20:55
(35) as TT как раз не лишнее. У вложенного должен быть псевдоним. Другой вопрос, что вложенный запрос - это лишнее, да и устаревшее.
   Franchiser
 
37 - 05.06.18 - 20:57
(29) хотя нет, у тебя вложенный запрос. Then пропустил в case
   trad
 
38 - 05.06.18 - 22:59
Надо разобраться с двойным TNNomenclature
   Fram
 
39 - 06.06.18 - 00:49
сдается мне что ошибка, которую ТС тщательно скрывает, к CASE не имеет никакого отношения ))


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует