【问题标题】:do a "order by DESC or ASC" in a union with different columns在具有不同列的联合中执行“按 DESC 或 ASC 排序”
【发布时间】:2017-09-06 13:59:48
【问题描述】:

美好的一天,我需要按 Fecha 列排序,但是当使用 order by 时我不能,因为 union 中的 select 没有相同的列。你怎么能按这个字段排序Fecha。你能帮我解决这个问题吗? 例如如下。

以下是我正在使用的查询。

        SELECT 'PESO:','VOLUMEN:','NO. PIEZAS:','ETD:','ETA:'

        UNION ALL 


        SELECT
        (SELECT ISNULL(Valor,'') FROM MovCampoExtra WHERE Modulo = 'VTAS' AND ID = Venta.ID AND CampoExtra = 'CEDIS0103') AS pesoBruto,
        (SELECT ISNULL(Valor,'') FROM MovCampoExtra WHERE Modulo = 'VTAS' AND ID = Venta.ID AND CampoExtra = 'CEDIS0121') AS volumen,
        (SELECT ISNULL(Valor,'') FROM MovCampoExtra WHERE Modulo = 'VTAS' AND ID = Venta.ID AND CampoExtra = 'CEDIS0102') AS cantidadUnidades,
         (SELECT CEDIS0120 FROM VentaCampoExtra WHERE ID = Venta.ID) AS ETD,
            (SELECT CEDIS0123 FROM VentaCampoExtra WHERE ID = Venta.ID) AS ETA
            FROM Venta 
            --Venta AS v
        INNER JOIN Cte AS c ON c.Cliente = Venta.Cliente
            INNER JOIN Usuario us On us.Usuario = Venta.Usuario
        WHERE

            @Origen=Venta.TMLICentroCosto AND
            Venta.Mov IN ('Instruccion EXPO', 'Instruccion IMPO','Instruc. Nacional')
            AND Venta.Empresa IN ('TM')
            AND Venta.ID is NOT NULL 
            AND Venta.Estatus NOT IN ('Cancelado')


         UNION ALL 


        SELECT 'FECHA:','HORA:','ACTIVIDADES:',' ',' '

        UNION ALL 

        SELECT

            Fecha = ISNULL(CONVERT(VARCHAR, mb.Fecha, 103),''), -- AS Fecha,
            Hora = ISNULL(CONVERT(VARCHAR, mb.Fecha, 108),''), -- AS Hora,

            Comentarios = ISNULL(mb.Evento2,''),
            '',
            ''


            FROM Venta 
            --Venta AS v
        INNER JOIN Cte AS c ON c.Cliente = Venta.Cliente
            LEFT OUTER JOIN MovBitacora AS mb ON mb.ID = Venta.ID
            INNER JOIN Usuario us On us.Usuario = Venta.Usuario

        WHERE

            @Origen=Venta.TMLICentroCosto AND
            Venta.Mov IN ('Instruccion EXPO', 'Instruccion IMPO','Instruc. Nacional')
            AND Venta.Empresa IN ('TM')
            AND Venta.ID is NOT NULL 
            AND Venta.Estatus NOT IN ('Cancelado')
            ORDER BY Fecha ASC          

        RETURN
        END

【问题讨论】:

  • 你想要完成什么?您的外部 SELECT 只是将一行非别名字符串联合到另一个内部 SELECT 中,该内部 SELECT 也将一行非别名字符串联合起来。您的 SELECT 中没有名为“Fecha”的列。以及为什么选择'PESO:','VOLUMEN:','NO 的行。 PIEZAS:','ETD:','ETA:'?您是否希望这些是列名而不是一行字符串?

标签: sql sql-server sql-order-by


【解决方案1】:

好吧,先抱怨一下,这是一种可怕的做事方式。您不应该从 sql 查询返回标题列,并将两个不相关的查询组合在一起。这应该是应用层调用的两个查询,它也应该处理标头。

但如果你因为某种神秘的原因必须这样做,你可以在每个查询中添加一个“排序”列

Header 1 sortval = A
Peso query sortval = B + Peso
Header 2 sortval = C
Fecha query sortval = D + Fecha (in YYYYMMDD format)

然后在整个内容中添加一个大选择以选择列(您需要在第一个标题选择中为其添加别名)并按 sortval 排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 2021-10-07
    • 2014-08-29
    • 2019-08-13
    相关资源
    最近更新 更多