Mysql选择列取决于列总和结果

时间:2015-11-16 17:19:04

标签: mysql sql

我有这个问题:

SELECT 
DESCRIPCION,
MEDICION,
UNIDAD,
PRECIOUNITPROV1,
PRECIOUNITPROV1 * medicion AS IMPORTE1,
PRECIOUNITPROV2,
PRECIOUNITPROV2 * medicion AS IMPORTE2,
PRECIOUNITPROV3,
PRECIOUNITPROV3 * medicion AS IMPORTE3     
FROM
contcomparativos
    INNER JOIN
comparativos ON comparativos.codobra = contcomparativos.codobra
    AND comparativos.numcomp = contcomparativos.numcomp
WHERE
comparativos.user = 'root'
    AND comparativos.codobra = '39E'
    AND comparativos.familia = 'ANDAMIOS SUSPENDIDOS'

我想要获得的只有这三列中的一列 - > IMPORTE1,IMPORTE2或IMPORTE3。

选择正确列的标准是:

最少(sum(IMPORTE1),sum(IMPORTE2),sum(IMPORTE3))

因此我想只在我的查询de IMPORT? SUM值较小的列

提前致谢。

2 个答案:

答案 0 :(得分:0)

您是否在MySQL中尝试过LEAST()

这可能有用

SELECT 
    DESCRIPCION,
    MEDICION,
    UNIDAD,
    PRECIOUNITPROV1,
    PRECIOUNITPROV1 * medicion AS IMPORTE1,
    PRECIOUNITPROV2,
    PRECIOUNITPROV2 * medicion AS IMPORTE2,
    PRECIOUNITPROV3,
    PRECIOUNITPROV3 * medicion AS IMPORTE3,
    (CASE LEAST(SUM(PRECIOUNITPROV1 * medicion),SUM(PRECIOUNITPROV2 * medicion),SUM(PRECIOUNITPROV3 * medicion)) WHEN SUM(PRECIOUNITPROV1 * medicion) THEN 'PRECIOUNITPROV1' WHEN SUM(PRECIOUNITPROV2 * medicion) THEN 'PRECIOUNITPROV2' WHEN SUM(PRECIOUNITPROV3 * medicion) THEN 'PRECIOUNITPROV3' END) AS Least_Sum_Column_Name      
    FROM
    contcomparativos
        INNER JOIN
    comparativos ON comparativos.codobra = contcomparativos.codobra
        AND comparativos.numcomp = contcomparativos.numcomp
    WHERE
    comparativos.user = 'root'
        AND comparativos.codobra = '39E'
        AND comparativos.familia = 'ANDAMIOS SUSPENDIDOS'

希望这有帮助。

答案 1 :(得分:0)

更新:这是一个动态SQL(希望它有帮助)

SELECT (
SELECT CASE
 WHEN (Sum(PRECIOUNITPROV1 * MEDICION) < Sum(PRECIOUNITPROV2 * MEDICION))
 AND (SUM(PRECIOUNITPROV1 * medicion) < SUM(PRECIOUNITPROV3 * medicion))
 THEN 'PRECIOUNITPROV1 * medicion'
 WHEN (Sum(PRECIOUNITPROV2 * MEDICION) < Sum(PRECIOUNITPROV1 * MEDICION))
 AND (SUM(PRECIOUNITPROV2 * medicion) < SUM(PRECIOUNITPROV3 * medicion))
 THEN 'PRECIOUNITPROV2 * medicion'
 WHEN (Sum(PRECIOUNITPROV3 * MEDICION) < Sum(PRECIOUNITPROV2 * MEDICION))
 AND (SUM(PRECIOUNITPROV3 * medicion) < SUM(PRECIOUNITPROV1 * medicion))
 THEN 'PRECIOUNITPROV3 * medicion'
 END)
into @SelectedCol
FROM contcomparativos
    INNER Join
comparativos ON comparativos.codobra = contcomparativos.codobra
    AND comparativos.numcomp = contcomparativos.numcomp
WHERE
comparativos.user = 'root'
    AND comparativos.codobra = '39E'
    AND comparativos.familia = 'ANDAMIOS SUSPENDIDOS';
SET @user = 'root';
SET @codobra = '39E';
SET @familia = 'ANDAMIOS SUSPENDIDOS';

SET @sql = CONCAT('
SELECT
DESCRIPCION,
MEDICION,
UNIDAD,
PRECIOUNITPROV1,
PRECIOUNITPROV1 * medicion AS IMPORTE1,
PRECIOUNITPROV2,
PRECIOUNITPROV2 * medicion AS IMPORTE2,
PRECIOUNITPROV3,
PRECIOUNITPROV3 * medicion AS IMPORTE3,',
@SelectedCol, ' AS Least_PRECIOUNITPROV
FROM
contcomparativos
    INNER Join
comparativos ON comparativos.codobra = contcomparativos.codobra
    AND comparativos.numcomp = contcomparativos.numcomp
WHERE
comparativos.user = ', @user,
    'AND comparativos.codobra = ', @codobra,
    'AND comparativos.familia = ', @familia );

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;