Как изменить одно из моих полей в соответствии с результатом подзапроса Ошибка: подзапрос возвратил более 1 значения? - PullRequest
0 голосов
/ 20 марта 2019

То, что я хочу сделать, - это запрос, который указывает проекты, которые находятся в таблице, и которые имеют среднюю скорость, когда у вас есть такие проекты запроса, что я должен сделать, чтобы через другой запрос я мог умножить процент дополе из другой таблицы, где должен существовать тот же проект.

select CASE
    WHEN estimador.Clave = 'Perfiles' THEN (select gasto.[Importe Banco]*0.5 from SN_INT_PartidasGasto as gasto where gasto.[Clase de Coste]='FSW' and estimador.IdProyecto=gasto.[ID Proyecto] and AmbientePRE='PRE')
    WHEN estimador.Clave = 'Puntos V1' THEN 'Puntos V1'
    WHEN estimador.Clave = 'Puntos V2' THEN 'Puntos V2'
    ELSE 'Sorry, no match.'
    END AS CATEGORIA from tb_Estimador as estimador where estimador.IdProyecto in (select gse.FolioSantec from db_Incurrido.dbo.GSE_Real as gse where gse.FolioSantec=estimador.IdProyecto and estimador.Clave!='Tarifa Promedio')

При запросе выше я получаю следующую ошибку:

Msg 512, Level 16, State 1, Line 1 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= ,
>, >= or when the subquery is used as an expression.

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Подзапрос в выбранной части возвращает более 1 строки.Вы должны добавить top 1 к нему.

select CASE
    WHEN estimador.Clave = 'Perfiles' THEN (select TOP 1 gasto.[Importe Banco]*0.5 from SN_INT_PartidasGasto as gasto where gasto.[Clase de Coste]='FSW' and estimador.IdProyecto=gasto.[ID Proyecto] and AmbientePRE='PRE')
    WHEN estimador.Clave = 'Puntos V1' THEN 'Puntos V1'
    WHEN estimador.Clave = 'Puntos V2' THEN 'Puntos V2'
    ELSE 'Sorry, no match.'
    END AS CATEGORIA from tb_Estimador as estimador where estimador.IdProyecto 
    in (select gse.FolioSantec from db_Incurrido.dbo.GSE_Real as gse where gse.FolioSantec=estimador.IdProyecto and estimador.Clave!='Tarifa Promedio')
0 голосов
/ 20 марта 2019

Вы можете использовать APPLY с JOIN:

SELECT (CASE WHEN estimador.Clave = 'Perfiles' 
             THEN gasto.[Importe Banco] * 0.5
             WHEN estimador.Clave = 'Puntos V1' 
             THEN 'Puntos V1'
             WHEN estimador.Clave = 'Puntos V2' 
             THEN 'Puntos V2' 
             ELSE 'Sorry, no match.'
        END) AS CATEGORIA 
FROM tb_Estimador as estimador INNER JOIN
     db_Incurrido.dbo.GSE_Real AS gse
     ON gse.FolioSantec = estimador.IdProyecto OUTER APPLY
     (SELECT TOP (1) gasto.[Importe Banco] 
      FROM SN_INT_PartidasGasto AS gasto 
      WHERE gasto.[Clase de Coste] = 'FSW' AND 
            estimador.IdProyecto = gasto.[ID Proyecto] AND 
            AmbientePRE = 'PRE'
     ) gasto 
WHERE estimador.Clave <> 'Tarifa Promedio';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...