我试图查询并在列中显示所有唯一的BillingCode,以及获取每个BillingCode出现多少次的总计数。
问题在于,BillingCode未被分隔成自己的列,而是列中字符串的一部分,该字符串可能更长或更短,具体取决于帐户的设置。
保持不变并且可能会有所帮助的是,计费代码本身包含在标签12345中
我试图仅返回RawXml列中这些标签之间包含的内容
。
我已经在我自己的测试SQL服务器上进行了设置,以尝试解决这个问题,但是到目前为止,我对解决这个问题还没有走运。
这是一个SQL查询,用于创建一个新表,其中包含我正在使用的示例
CREATE TABLE mytable
(Column1 varchar(100))
;
INSERT INTO mytable
(Column1)
VALUES
('<Xml><Description /><BillingCode>Billing1</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>Billing12</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>TEST</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>BillingCodeHere</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>Billing3</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>123</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>Billing2</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>12345</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>Billing1</BillingCode></Xml>'),
('<Xml><Description>Line 1</Description><BillingCode>BillingCodeHere</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>Billing1</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>Billing2</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>Billing1</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>SomethingHere</BillingCode></Xml>'),
('<Xml><Description /><BillingCode>Billing2</BillingCode></Xml>')
。
我认为这是我最接近帐单代码的地方。我感觉自己很近,但是我一直被困在这里。
Select Right(RawXml, LEN(RawXml) - CHARINDEX('<BillingCode>', RawXml, 1) - 12)
From dbo.mytable
结果集看起来像这样
Billing1</BillingCode></Xml>
Billing12</BillingCode></Xml>
TEST</BillingCode></Xml>
BillingCodeHere</BillingCode></Xml>
。
我希望输出的内容是帐单代码标签之间包含的内容 ???
从这里,我将能够获得每个唯一计费代码的总数。
BillingCode Total
TEST 1
SomethingHere 1
BillingCodeHere 2
Billing1 4
Billing2 3
Billing3 1
etc...
答案 0 :(得分:3)
使用XML方法:
SELECT BillingCode, COUNT(*)
FROM mytable
CROSS APPLY (SELECT CAST(Column1 AS XML)) u(v)
CROSS APPLY u.v.nodes('//BillingCode') s(c)
CROSS APPLY (SELECT s.c.value('.', 'nvarchar(128)')) AS z(BillingCode)
GROUP BY BillingCode;