Sql server GROUP BY子句中不允许使用Sql server XML方法
我只是在指定xml数据的地方发出一个GROUPBY,然后我得到一个错误,GROUPBY子句中不允许使用xml方法 这是我的sqlSql server GROUP BY子句中不允许使用Sql server XML方法,sql-server,xml,Sql Server,Xml,我只是在指定xml数据的地方发出一个GROUPBY,然后我得到一个错误,GROUPBY子句中不允许使用xml方法 这是我的sql SELECT HourSheetID,(MAX(RowID)+1) as "RowID", XMLData.value('(Log/EntryDate)[1]','datetime') as EntryDate, XMLData.value('(Log/SpecialistID)[1]','int') as SpecialistID, XMLData.value('(
SELECT HourSheetID,(MAX(RowID)+1) as "RowID",
XMLData.value('(Log/EntryDate)[1]','datetime') as EntryDate,
XMLData.value('(Log/SpecialistID)[1]','int') as SpecialistID,
XMLData.value('(Log/HoursData)[1]','decimal(18,2)') as HoursData,
XMLData.value('(Log/UpdatedBy)[1]','varchar(max)') as UpdatedBy,
XMLData.value('(Log/Options)[1]','varchar(max)') as Options,
logdate
FROM dbo.EditedHourSheetLog
GROUP BY HourSheetID,
XMLData.value('(Log/EntryDate)[1]','datetime'),
XMLData.value('(Log/SpecialistID)[1]','int'),
XMLData.value('(Log/HoursData)[1]','decimal(18,2)'),
XMLData.value('(Log/UpdatedBy)[1]','varchar(max)'),
XMLData.value('(Log/Options)[1]','varchar(max)'),
logdate
如果我不能在GROUPBY CLUSE中指定xml数据,那么还有什么其他选项可用…请指导。谢谢
这样我就完成了我的任务
您可以使用派生表并在主查询中执行分组方式 选择T.HourSheetID, 最大RowID+1作为RowID, T.EntryDate, T.SpecialistID, T.HoursData, T.更新人:, T.选项, 罗格达特 从…起 选择HourSheetID, 罗维德, 值'Log/EntryDate[1],'datetime'作为EntryDate, XMLData.value'Log/SpecialistID[1],'int'作为SpecialistID, 值'Log/HoursData[1],'decimal18,2'作为HoursData, XMLData.value'Log/UpdatedBy[1],'varcharmax'作为UpdatedBy, 值'Log/Options[1],'varcharmax'作为选项, 日志日期 来自dbo.EditedHourSheetLog AS T 由T.HourSheetID分组, T.EntryDate, T.SpecialistID, T.HoursData, T.更新人:, T.选项, 罗格达特
ALTER PROC sp_HourSheetLog
(
@StartDate VARCHAR(8),
@EndDate VARCHAR(8)
)
AS
SELECT B.ID
,A.RowID
,B.EntryDate
,B.Name
,B.HoursData
,B.UpdatedBy
,Options=(CASE B.Options
WHEN 'rdLeave' THEN 'Leave'
WHEN 'rdsick' THEN 'Sick'
WHEN 'rdSalvage' THEN 'Salvage'
WHEN 'rdCSRDuty' THEN 'CSR Duty'
WHEN 'rdShippingSales' THEN 'Shipping and Sales'
WHEN 'rdEOL' THEN 'EOL'
WHEN 'rdTraining' THEN 'Training'
WHEN 'rdOther' THEN 'Other'
END)
,B.ModDate
FROM (
(
SELECT HourSheetID,(MAX(RowID)+1) as "RowID"
FROM EditedHourSheetLog l,EditedHourSheet h
GROUP BY HourSheetID
) A
JOIN
(
SELECT h.ID
,s.Name
,h.EntryDate
,h.HoursData
,h.Options
,h.UpdatedBy
,h.ModDate from EditedHourSheet h
LEFT JOIN Specialists s
ON h.SpecialistID=s.SpecialistID
) B
ON A.HourSheetID=B.ID
)
WHERE Convert(Varchar,ModDate,112)>=@StartDate AND
Convert(Varchar,ModDate,112)<=@EndDate
UNION
(
Select HourSheetID as ID,RowID,
XMLData.value('(Log/EntryDate)[1]','datetime') as EntryDate,
--XMLData.value('(Log/SpecialistID)[1]','int') as SpecialistID,
s.Name,
XMLData.value('(Log/HoursData)[1]','decimal(18,2)') as HoursData,
CAST(XMLData.value('(Log/UpdatedBy)[1]','varchar(max)') AS VARCHAR(MAX)) UpdatedBy,
Options=(CASE XMLData.value('(Log/Options)[1]','varchar(max)')
WHEN 'rdLeave' THEN 'Leave'
WHEN 'rdsick' THEN 'Sick'
WHEN 'rdSalvage' THEN 'Salvage'
WHEN 'rdCSRDuty' THEN 'CSR Duty'
WHEN 'rdShippingSales' THEN 'Shipping and Sales'
WHEN 'rdEOL' THEN 'EOL'
WHEN 'rdTraining' THEN 'Training'
WHEN 'rdOther' THEN 'Other'
END),
LogDate as ModDate
FROM EditedHourSheetLog h
LEFT JOIN Specialists s
ON h.XMLData.value('(Log/SpecialistID)[1]','int')=s.SpecialistID
WHERE Convert(Varchar,LogDate,112)>=@StartDate AND
Convert(Varchar,LogDate,112)<=@EndDate
)
ORDER BY ID,RowID DESC
--sp_HourSheetLog '20140101','20140326'