Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按xml查询的结果分组_Sql_Xml_Tsql_Group By_Sqlxml - Fatal编程技术网

Sql 按xml查询的结果分组

Sql 按xml查询的结果分组,sql,xml,tsql,group-by,sqlxml,Sql,Xml,Tsql,Group By,Sqlxml,我有一个带有XML列(称为元数据)的表,它如下所示: <props> <prop name="bytes" value="194" /> <prop name="error" value="File is a text file" /> <prop name="mime-type" value="text/plain " /> </props> SELECT error, COUNT(*) errorCount FROM

我有一个带有XML列(称为元数据)的表,它如下所示:

<props>
  <prop name="bytes" value="194" />
  <prop name="error" value="File is a text file" />
  <prop name="mime-type" value="text/plain " />
</props>
SELECT error, COUNT(*) errorCount
FROM
    (
    SELECT
        e.c.value ('@value', 'varchar(50)') Error
    FROM source s
        CROSS APPLY s.metadata.nodes('props/prop[@name="error"]') e(c) 
    ) x
GROUP BY error
现在我想计算一下错误发生的频率:

SELECT MetaData.value('(/props/prop[@name="error"]/@value)[1]', 'varchar(50)') Error,
       COUNT(*) Count
FROM source
WHERE MetaData.exist('/props/prop[@name="error"]') = 1
GROUP BY Error
但我得到了错误信息:

梅尔敦207号,埃本16号,状态1号,泽勒5号
Ungültiger Spaltenname“错误”

这意味着:无效的列名“Error”

我在这里也试过:

SELECT MetaData.value('(/props/prop[@name="error"]/@value)[1]', 'varchar(50)') Error,
       MetaData.value('(/props/prop[@name="mime-type"]/@value)[1]', 'varchar(50)') MimeType,
       *
FROM source
WHERE MetaData.exist('/props/prop[@name="error"]') = 1
Select Error, COUNT(Error) FROM (
    SELECT MetaData.value('(/props/prop[@name="error"]/@value)[1]', 'varchar(50)') Error
    FROM videos
    WHERE MetaData.exist('/props/prop[@name="error"]') = 1
)
GROUP BY Error
但这与:

梅尔敦156号,埃本15号,状态1号,泽勒6号
《施吕塞尔运动团体》中的法氏语法

这意味着:关键字组附近的语法错误


如何解决该问题?

在同一查询中唯一可以引用别名列的时间是在ORDER BY子句中。上次尝试时出现的错误是,必须为子查询指定一个表别名,由于缺少更好的名称,我在下面使用了“X”

SELECT Error, COUNT(Error) [Count]
FROM (
    SELECT MetaData.value('(/props/prop[@name="error"]/@value)[1]', 'varchar(50)') Error
    FROM source
    WHERE MetaData.exist('/props/prop[@name="error"]') = 1
) X
GROUP BY Error

Count
是一个保留字,因此如果要使用它,您需要将其放在方括号中。

在同一查询中唯一可以引用别名列的时间是在ORDER BY子句中。上次尝试时出现的错误是,必须为子查询指定一个表别名,由于缺少更好的名称,我在下面使用了“X”

SELECT Error, COUNT(Error) [Count]
FROM (
    SELECT MetaData.value('(/props/prop[@name="error"]/@value)[1]', 'varchar(50)') Error
    FROM source
    WHERE MetaData.exist('/props/prop[@name="error"]') = 1
) X
GROUP BY Error

Count
是一个保留字,因此如果要使用它,需要将其放在方括号中。

在第二个查询中,需要命名子查询

Select Error, COUNT(Error) FROM
( 
    SELECT MetaData.value('(/props/prop[@name="error"]/@value)[1]', 'varchar(50)') Error 
    FROM videos 
    WHERE MetaData.exist('/props/prop[@name="error"]') = 1 
) subqueryname
GROUP BY Error 

你可以给它取任何你喜欢的名字

在第二个查询中,需要命名子查询

Select Error, COUNT(Error) FROM
( 
    SELECT MetaData.value('(/props/prop[@name="error"]/@value)[1]', 'varchar(50)') Error 
    FROM videos 
    WHERE MetaData.exist('/props/prop[@name="error"]') = 1 
) subqueryname
GROUP BY Error 

你可以给它取任何你喜欢的名字

正确。你也可以这样说:

<props>
  <prop name="bytes" value="194" />
  <prop name="error" value="File is a text file" />
  <prop name="mime-type" value="text/plain " />
</props>
SELECT error, COUNT(*) errorCount
FROM
    (
    SELECT
        e.c.value ('@value', 'varchar(50)') Error
    FROM source s
        CROSS APPLY s.metadata.nodes('props/prop[@name="error"]') e(c) 
    ) x
GROUP BY error
您也可以使用XQuery来实现这一点,尽管还不清楚您希望预期结果的外观。试试这个:

DECLARE @source TABLE ( metadata XML )

INSERT INTO @source
SELECT '<props> 
  <prop name="bytes" value="194" /> 
  <prop name="error" value="File is a text file" /> 
  <prop name="mime-type" value="text/plain " /> 
</props>'

INSERT INTO @source
SELECT '<props> 
  <prop name="bytes" value="0" /> 
  <prop name="error" value="error 1" /> 
  <prop name="error" value="error 2" /> 
  <prop name="mime-type" value="text/plain " /> 
</props>'

SELECT
    MetaData.value('(/props/prop[@name="error"]/@value)[1]', 'varchar(50)') Error, 
    MetaData.value('(/props/prop[@name="mime-type"]/@value)[1]', 'varchar(50)') MimeType, 
    MetaData.value('count(/props/prop[@name="error"])', 'int') errorCount, 
    * 
FROM @source 
WHERE MetaData.exist('/props/prop[@name="error"]') = 1
DECLARE@source表(元数据XML)
插入@source
选择'
'
插入@source
选择'
'
挑选
MetaData.value('(/props/prop[@name=“error”]/@value)[1]','varchar(50)'错误,
MetaData.value('(/props/prop[@name=“mime type”]/@value)[1],'varchar(50)')MimeType,
MetaData.value('count(/props/prop[@name=“error”]),'int')errorCount,
* 
来自@source
其中MetaData.exist('/props/prop[@name=“error”]')=1

正确。你也可以这样说:

<props>
  <prop name="bytes" value="194" />
  <prop name="error" value="File is a text file" />
  <prop name="mime-type" value="text/plain " />
</props>
SELECT error, COUNT(*) errorCount
FROM
    (
    SELECT
        e.c.value ('@value', 'varchar(50)') Error
    FROM source s
        CROSS APPLY s.metadata.nodes('props/prop[@name="error"]') e(c) 
    ) x
GROUP BY error
您也可以使用XQuery来实现这一点,尽管还不清楚您希望预期结果的外观。试试这个:

DECLARE @source TABLE ( metadata XML )

INSERT INTO @source
SELECT '<props> 
  <prop name="bytes" value="194" /> 
  <prop name="error" value="File is a text file" /> 
  <prop name="mime-type" value="text/plain " /> 
</props>'

INSERT INTO @source
SELECT '<props> 
  <prop name="bytes" value="0" /> 
  <prop name="error" value="error 1" /> 
  <prop name="error" value="error 2" /> 
  <prop name="mime-type" value="text/plain " /> 
</props>'

SELECT
    MetaData.value('(/props/prop[@name="error"]/@value)[1]', 'varchar(50)') Error, 
    MetaData.value('(/props/prop[@name="mime-type"]/@value)[1]', 'varchar(50)') MimeType, 
    MetaData.value('count(/props/prop[@name="error"])', 'int') errorCount, 
    * 
FROM @source 
WHERE MetaData.exist('/props/prop[@name="error"]') = 1
DECLARE@source表(元数据XML)
插入@source
选择'
'
插入@source
选择'
'
挑选
MetaData.value('(/props/prop[@name=“error”]/@value)[1]','varchar(50)'错误,
MetaData.value('(/props/prop[@name=“mime type”]/@value)[1],'varchar(50)')MimeType,
MetaData.value('count(/props/prop[@name=“error”]),'int')errorCount,
* 
来自@source
其中MetaData.exist('/props/prop[@name=“error”]')=1

哦,不,只是上次尝试时缺少了
X
。谢谢哦,不,只是我上次尝试时丢失了
X
。谢谢我想要一个错误消息和计数的列表。例如,未找到文件:3次。读取错误:10次,以此类推。如果我猜对了,您的sql语句将返回名为error right的
prop
s的计数?我想要一个错误消息和计数的列表。例如,未找到文件:3次。读取错误:10次,以此类推。如果我猜对了,您的sql语句将返回
prop
s的计数,并返回名称错误,对吗?