1

以下のコードの結果のソートに問題があります。特定の値が満たされる動的ソートフィールドがあり、指定されたフィールドでソートされます。ただし、いくつかの理由で一部のフィールドで並べ替えることができないようで、結果が不明な順序で並べ替えられているようです... i.totalExclTax - これでソートすると、結果はソートされません。したがって、なぜそのフィールドでソートできないのか疑問に思っていました

SELECT
i.invoicedDateTime AS `(@datetime)Date`,
i.invoiceNum AS `Invoice Num`,
c.displayName AS `Customer Name`,
m.name AS `Membership`,
FORMAT(i.totalExclTax, 2) AS `Total (Excl Tax)`,
FORMAT( SUM(it.amount), 2 ) AS `Tax`,
FORMAT(i.totalInclTax, 2) AS `Total (Incl Tax)`
FROM
(smSales__invoice i
JOIN smCustomer__customer c ON(i.customerId = c.id)
   AND c.ts_Deleted IS NULL
     JOIN smCustomer__membership m ON (c.membershipId = m.id)
     AND m.ts_Deleted IS NULL
)
  JOIN smSales__invoiceTax it ON(it.invoiceId = i.id)
  AND it.ts_Deleted IS NULL
WHERE i.invoicedDateTime BETWEEN '2012-07-01 00:00:00' AND DATE_ADD('2012-08-31 00:00:00', INTERVAL 1 DAY)
AND i.invoicedOutletId IN ('230614c3761512c8db000a38a346e217')
AND i.type = 'sales'
AND i.voidedDateTime IS NULL
AND i.ts_Deleted IS NULL
GROUP BY i.id
ORDER BY
  CASE 'B'
    WHEN 'A' THEN i.invoiceNum
    WHEN 'B' THEN i.totalExclTax
    ELSE `Customer Name`
  END
ASC;
4

1 に答える 1

0

あなたのケースは、常に 'B'='B' になるとすぐに、結果として 2 番目の値 (i.totalExclTax) を出力します。MySQL では、ステートメントに相当する次の文を使用してみてください。

ORDER BY 
if('B'='A', i.invoiceNum,if('B'='B',i.totalExclTax,'Customer Name')) 
ASC;
于 2012-08-15T06:41:06.240 に答える