Tsql 如何对一个联盟进行分类

Tsql 如何对一个联盟进行分类,tsql,Tsql,我不能把这件事分类。我希望整个结果集按DateId排序,然后按productName排序,但无法使其正常工作 SELECT d.DateId, s.product_name1 as productName FROM dbo.SaleDates d INNER JOIN dbo.Sale s ON s.saleId = d.saleId UNION ALL SELECT d.DateId, s.product_name2 as productName FROM

我不能把这件事分类。我希望整个结果集按DateId排序,然后按productName排序,但无法使其正常工作

SELECT  d.DateId,
    s.product_name1 as productName
FROM    dbo.SaleDates d
INNER JOIN dbo.Sale s ON s.saleId = d.saleId

UNION ALL

SELECT  d.DateId,
    s.product_name2 as productName
FROM    dbo.SaleDates d
INNER JOIN dbo.Sale s ON s.saleId = d.saleId

UNION ALL

SELECT  d.DateId,
    s.product_name3 as productName
FROM    dbo.SaleDates d
INNER JOIN dbo.Sale s ON s.saleId = d.saleId
order by d.DateId, productName

基本上不知道在哪里以及如何添加此订单。我不想在每个select中添加orderby,因为这样我就有了ordering的子集。我想订购整个结束结果集…

您可以使用CTE进行此操作。或者干脆做:

Select res.DateID, res.productName from 
(
SELECT  d.DateId,
    s.product_name1 as productName
FROM    dbo.SaleDates d
INNER JOIN dbo.Sale s ON s.saleId = d.saleId

UNION ALL

SELECT  d.DateId,
    s.product_name2 as productName
FROM    dbo.SaleDates d
INNER JOIN dbo.Sale s ON s.saleId = d.saleId

UNION ALL

SELECT  d.DateId,
    s.product_name3 as productName
FROM    dbo.SaleDates d
INNER JOIN dbo.Sale s ON s.saleId = d.saleId
)
order by res.DateId, res.productName

你可以用CTE来做这个。或者干脆做:

Select res.DateID, res.productName from 
(
SELECT  d.DateId,
    s.product_name1 as productName
FROM    dbo.SaleDates d
INNER JOIN dbo.Sale s ON s.saleId = d.saleId

UNION ALL

SELECT  d.DateId,
    s.product_name2 as productName
FROM    dbo.SaleDates d
INNER JOIN dbo.Sale s ON s.saleId = d.saleId

UNION ALL

SELECT  d.DateId,
    s.product_name3 as productName
FROM    dbo.SaleDates d
INNER JOIN dbo.Sale s ON s.saleId = d.saleId
)
order by res.DateId, res.productName
你可以试试这个:

SELECT * FROM 
(
    SELECT  d.DateId as DateId,
        s.product_name1 as productName
    FROM    dbo.SaleDates d
    INNER JOIN dbo.Sale s ON s.saleId = d.saleId

    UNION ALL

    SELECT  d.DateId as DateId,
        s.product_name2 as productName
    FROM    dbo.SaleDates d
    INNER JOIN dbo.Sale s ON s.saleId = d.saleId

    UNION ALL

    SELECT  d.DateId as DateId,
        s.product_name3 as productName
    FROM    dbo.SaleDates d
    INNER JOIN dbo.Sale s ON s.saleId = d.saleId
) AS A
order by DateId, ProductName
你可以试试这个:

SELECT * FROM 
(
    SELECT  d.DateId as DateId,
        s.product_name1 as productName
    FROM    dbo.SaleDates d
    INNER JOIN dbo.Sale s ON s.saleId = d.saleId

    UNION ALL

    SELECT  d.DateId as DateId,
        s.product_name2 as productName
    FROM    dbo.SaleDates d
    INNER JOIN dbo.Sale s ON s.saleId = d.saleId

    UNION ALL

    SELECT  d.DateId as DateId,
        s.product_name3 as productName
    FROM    dbo.SaleDates d
    INNER JOIN dbo.Sale s ON s.saleId = d.saleId
) AS A
order by DateId, ProductName
请参阅列别名(在您的示例中为DateId、Productname)

或参考列号

select 1 a
union all
select 2 a
order by 1
请参阅列别名(在您的示例中为DateId、Productname)

或参考列号

select 1 a
union all
select 2 a
order by 1
希望这有帮助


希望这有助于

您的代码应该可以正常工作。最终的排序依据应用于整个结果集。(编辑:啊。只需使用
DateId
而不是
d.DateId
)yea尝试了Martin but get-BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML。当我试图改变观点时。如果我高亮显示它,SQL会正常运行,但当视图试图更改时,我得到了它。@CoffeeAddict您是否将此代码放置在视图中?您拥有的代码应该可以工作。最终的排序依据应用于整个结果集。(编辑:啊。只需使用
DateId
而不是
d.DateId
)yea尝试了Martin but get-BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML。当我试图改变观点时。如果我高亮显示它,SQL会正常运行,但当视图试图更改时,我得到了它。@CoffeeAddict是否将此代码放置在视图中?错误:ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML。这是我尝试更改视图时得到的结果…使用您的技术错误:ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML。这是我尝试更改视图时得到的结果…使用您的技术得到的结果