我收到此错误:
ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效,除非还指定了TOP,OFFSET或FOR XML。
这是我的疑问:
SELECT * FROM
(SELECT H.Plotingan as 'Plotingan',
E.EmployeeName as 'Nama',
E.EmployeePosition as 'Jabatan',
E.EmployeeNo as 'NIK',
D.Tanggal,D.DutyCode
FROM CobaDutyDetail D
JOIN CobaDutyHeader H
ON D.CobaDutyHeaderID = H.IDHeaderDuty
JOIN Employee E
ON H.EmployeeID = E.EmployeeID
WHERE E.WorkLocation = 'JAKARTA'
ORDER BY D.CreatedOn DESC)AS SOURCETABLE
PIVOT(MAX(DutyCode)FOR TANGGAL IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30]))AS PIVOTTABLE
答案 0 :(得分:2)
关系模型指定关系的元组没有特定的顺序。换句话说,数据库表中的行没有特定的顺序。
因此,当您创建可以作为表引用的任何内容(即视图,派生表等)时,除非需要限制结果(使用{{1),否则不能指定order by
子句}}或top
)
您可以将offset
子句与order by
子句一起使用,因为创建xml与创建表不同。
现在我已经解释了你得到的错误消息背后的原因,这里是解决方案 - 只需从派生表中删除for xml
子句:
order by
答案 1 :(得分:0)
使用订单膨胀子查询是不合理的,因为更多外部查询生病了"参见"只是结果数据集,并以与数据集顺序无关的相同方式使用它。如果你想要ORDER BY
那么糟糕,你可以填充临时表或表变量并改为使用它。
SELECT H.Plotingan as [Plotingan],
E.EmployeeName as [Nama],
E.EmployeePosition as [Jabatan],
E.EmployeeNo as [NIK],
D.Tanggal,D.DutyCode
into #temp
FROM CobaDutyDetail D
JOIN CobaDutyHeader H
ON D.CobaDutyHeaderID = H.IDHeaderDuty
JOIN Employee E
ON H.EmployeeID = E.EmployeeID
WHERE E.WorkLocation = 'JAKARTA'
ORDER BY D.CreatedOn DESC)AS SOURCETABLE
SELECT * FROM #temp AS SOURCETABLE
PIVOT(MAX(DutyCode)FOR TANGGAL IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30])) AS PIVOTTABLE
但那不可取。 Zohar指出的正确答案是摆脱那个排序条款。