我有这个问题:
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值较小的列
提前致谢。
答案 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;