不同列的不同 order by 子句

Different order by clause for different columns

我希望我的标题有意义,这是我的示例 table。

我的 table 有 1 列用于唯一产品条形码,以及 4 列日期列用于存储产品通过检查区域的日期和时间(其中 4 个),我删除了我的日期例如,假设它们都是相同的日期。

Product | Time1 | Time2 | Time3 | Time4
---------------------------------------
   A    | 10:00 | 10:15 | 10:30 | 10:45
   B    | 10:05 | 10:25 | 10:35 | 10:50
   C    | 10:10 | 10:20 | 10:40 | 10:55

输出:

 Inspect1 | Inspect2 | Inspect3 | Inspect4
 -----------------------------------------
    A            A         A          A
    B            C         B          B
    C            B         C          C

在我的输出中,我想 select 产品多次使用不同的排序方式(按时间 1 排序,按时间 2 排序等)

我多次使用案例 select 到 select 产品,如何下订单才能得到类似于我上面示例的内容。

SELECT     
CASE WHEN time1 BETWEEN '10:00' AND '11:00' THEN product END AS inspect1, 
CASE WHEN time2 BETWEEN '10:00' AND '11:00' THEN product END AS inspect2, 
CASE WHEN time3 BETWEEN '10:00' AND '11:00' THEN product END AS inspect3, 
CASE WHEN time4 BETWEEN '10:00' AND '11:00' THEN product END AS inspect4
FROM         Table

这是一个使用 ROW_NUMBER 的解决方案:

SQL Fiddle

WITH CteUnion(Product, TimeNum, Value) AS(
    SELECT Product, 'Time1', Time1 FROM YourTable UNION ALL
    SELECT Product, 'Time2', Time2 FROM YourTable UNION ALL
    SELECT Product, 'Time3', Time3 FROM YourTable UNION ALL
    SELECT Product, 'Time4', Time4 FROM YourTable
),
CteRN AS(
    SELECT *,
        RN = ROW_NUMBER() OVER(PARTITION BY TimeNum ORDER BY Value)
    FROM CteUnion
),
CteOrd AS(
    SELECT *,
        Ord = ROW_NUMBER() OVER(PARTITION BY RN ORDER BY Value)
    FROM CteRN
)
SELECT
    Inspect1 = MAX(CASE WHEN Ord = 1 THEN Product END),
    Inspect2 = MAX(CASE WHEN Ord = 2 THEN Product END),
    Inspect3 = MAX(CASE WHEN Ord = 3 THEN Product END),
    Inspect4 = MAX(CASE WHEN Ord = 4 THEN Product END)
FROM CteOrd
GROUP BY RN
ORDER BY RN