| 
    
        
     
     | 
    
  | 
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 
 | 
||||
| 
    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 не имеет никакого отношения ))     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |