Имя: Пароль:
1C
1С v8
CASE в SQL -запросе
,
0 Игорь_МММ
 
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,
1 Franchiser
 
гуру
05.06.18
19:30
Так нельзя
2 Игорь_МММ
 
05.06.18
19:32
(1) а как можно?
3 Franchiser
 
гуру
05.06.18
19:32
В SQL нет понятие булеов, переделай чтобы число получилось
4 Franchiser
 
гуру
05.06.18
19:32
Номенклатуру в case поставь
5 Tateossian
 
05.06.18
19:33
Булево 0x00 - это истина, 0х01 - ложь. Тип bit
6 Franchiser
 
гуру
05.06.18
19:33
Что такое nomenclature? Может тебе надо as  nomenclature
7 Franchiser
 
гуру
05.06.18
19:34
(5) ок, а нужен ли ему тип бит?
8 Игорь_МММ
 
05.06.18
19:35
(3)AccType это число
(6)да, nomenclature - это Алиас
9 Franchiser
 
гуру
05.06.18
19:36
Тогда равно убери и после case напиши as nomenclature
10 Игорь_МММ
 
05.06.18
19:36
+(8) в зависимости от AccType хочу присвоить nomenclature либо
NomCompl либо Nomenclature
11 Tateossian
 
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,
так?
13 Tateossian
 
05.06.18
19:38
(10) Профайлером посмотри, там немного по другому кейс в запросах выглядит
14 Franchiser
 
гуру
05.06.18
19:39
(11) по ком тип bit нормально передается?
15 Franchiser
 
гуру
05.06.18
19:40
(12) нет
Case when ... Then ....
When .... Then ...
Else ...
End
16 Tateossian
 
05.06.18
19:40
(12) CASE WHEN AccType = 0х00 THEN ... Дальше ОК
17 Tateossian
 
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?
19 Franchiser
 
гуру
05.06.18
19:44
(17) не понял если я через 1с++ хочу получить тип bit, что я увижу на выходе в recordset ?
20 Franchiser
 
гуру
05.06.18
19:45
(18) что пишет в msms?
21 Franchiser
 
гуру
05.06.18
19:46
(18) это если тип bit значит false
22 Игорь_МММ
 
05.06.18
19:46
(20) Ошибка при вызове метода контекста (Execute)
по причине:
Произошла исключительная ситуация (0x80004005)
23 Franchiser
 
гуру
05.06.18
19:48
(22) в msms запусти а не через odbc
24 Игорь_МММ
 
05.06.18
19:51
(23) млин, ребята .. что такое msms ?
практически первый раз пишу sql запрос
25 youalex
 
05.06.18
20:06
(24) https://msdn.microsoft.com/ru-ru/library/ms166996(v=sql.120)

Оно же квери (наверное, устар.)
26 youalex
 
05.06.18
20:07
(25) + ссылка почему-то не аллё.
SQL Server Management Studio
27 Franchiser
 
гуру
05.06.18
20:07
Microsoft SQL management studio
28 Franchiser
 
гуру
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 убираю - все работает
30 youalex
 
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,

даже так не проходит
32 youalex
 
05.06.18
20:38
(31) а так:  select case 7 when 7 then 1 else 0 end  ?
запускай (27) и смотри там.
33 youalex
 
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,

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