Sql server 每个记录的字体名称和字体样式?给我个主意。嗨,伊扎克,我想,这可以用少一点的弦乐体操来解决:-)@TridipBhattacharjee,我通过添加三个属性更新了答案。你可以用同样的方法获得任何属性。@YitzhakKhabinsky非常感谢你。回答得好,
Sql server 每个记录的字体名称和字体样式?给我个主意。嗨,伊扎克,我想,这可以用少一点的弦乐体操来解决:-)@TridipBhattacharjee,我通过添加三个属性更新了答案。你可以用同样的方法获得任何属性。@YitzhakKhabinsky非常感谢你。回答得好,,sql-server,xml,xquery,Sql Server,Xml,Xquery,每个记录的字体名称和字体样式?给我个主意。嗨,伊扎克,我想,这可以用少一点的弦乐体操来解决:-)@TridipBhattacharjee,我通过添加三个属性更新了答案。你可以用同样的方法获得任何属性。@YitzhakKhabinsky非常感谢你。回答得好,但我觉得很难理解。如何使用上面的代码在XML层次结构中循环?我执行以表格格式返回数据的代码。如何读取每条记录的FontName和FontStyle值?给我个主意。嗨,伊扎克,我想,这可以用少一点的弦乐体操来解决:-)@TridipBhattac
每个记录的字体名称和字体样式?给我个主意。嗨,伊扎克,我想,这可以用少一点的弦乐体操来解决:-)@TridipBhattacharjee,我通过添加三个属性更新了答案。你可以用同样的方法获得任何属性。@YitzhakKhabinsky非常感谢你。回答得好,但我觉得很难理解。如何使用上面的代码在XML层次结构中循环?我执行以表格格式返回数据的代码。如何读取每条记录的FontName和FontStyle值?给我个主意。嗨,伊扎克,我想,这可以用少一点的弦乐体操来解决:-)@TridipBhattacharjee,我通过添加三个属性更新了答案。您可以用同样的方法访问任何属性。@YitzhakKhabinsky非常感谢您。@TridipBhattacharjee可能是我弄错了,但给定的代码将从任何元素读取这些属性。你试过了吗?我在xquery方面很弱,但我想知道为什么我需要以这种方式读取属性值…
BMs.Content.value(“(/*/@FontName)[1]”,'varchar(max)”作为FontName
,然后我以这种方式读取属性值(“@FontName”,“varchar(max)”)请进一步指导我。@TridipBhattacharjee您可以将内容
包含在返回值列表中(只需删除.value()
)。任何元素都有不同的名称,因此我们可以使用*
。在这个匿名元素中,我们可以获取属性。属性在XQuery中以前导的@
命名。最后,我们用(…)[1]
包含整个XPath,这意味着:第一次出现。方法.value()
要求保证单例值。当我使用嵌套组测试代码时,它无法读取/考虑这些嵌套组。xml中有一个嵌套组,名为Group1和Group2。一个组可以有多达个嵌套组,每个嵌套组可以有或没有行项目,每个行项目可以有或没有BM元素。请看我的编辑。Yitzhak Khabinsky先生在这里发布了一个代码,这个代码有点难,但可以读取嵌套组。所以我的请求是,你们可以用我在编辑部分提到的xml运行你们的代码,然后你们可以看到你们的代码并没有读取xml中的嵌套组。请给我一个更好的建议,因为在我的xml组中,可以嵌套在第n个级别,嵌套的组有时会有子行项目元素,有时可能没有。请调查这个问题。thanks@TridipBhattacharjee可能我弄错了,但是给定的代码将从任何元素读取这些属性。你试过了吗?我在xquery方面很弱,但我想知道为什么我需要以这种方式读取属性值…BMs.Content.value(“(/*/@FontName)[1]”,'varchar(max)”作为FontName
,然后我以这种方式读取属性值(“@FontName”,“varchar(max)”)请进一步指导我。@TridipBhattacharjee您可以将内容
包含在返回值列表中(只需删除.value()
)。任何元素都有不同的名称,因此我们可以使用*
。在这个匿名元素中,我们可以获取属性。属性在XQuery中以前导的@
命名。最后,我们用(…)[1]
包含整个XPath,这意味着:第一次出现。方法.value()
要求保证单例值。当我使用嵌套组测试代码时,它无法读取/考虑这些嵌套组。xml中有一个嵌套组,名为Group1和Group2。一个组可以有多达个嵌套组,每个嵌套组可以有或没有行项目,每个行项目可以有或没有BM元素。请看我的编辑。Yitzhak Khabinsky先生在这里发布了一个代码,这个代码有点难,但可以读取嵌套组。所以我的请求是,你们可以用我在编辑部分提到的xml运行你们的代码,然后你们可以看到你们的代码并没有读取xml中的嵌套组。请给我一个更好的建议,因为在我的xml组中,可以嵌套在第n个级别,嵌套的组有时会有子行项目元素,有时可能没有。请调查这个问题。谢谢
DECLARE @XMLData XML = N'<Nodes>
<Sheet FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Model1">
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Consensus Model">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1225" NodeText="Net Revenue" />
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1226" NodeText="Cost of Revenue">
<BM FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" BMID="01" NodeText="As % of Net Revenue" />
<BM FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" BMID="02" NodeText="Year over Year Growth" />
</LineItem>
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Test Group1">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1225" NodeText="Test_Group_LI" />
</Group>
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Test Group2"/>
</Group>
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Segment Details">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1227" NodeText="Cost of Revenue-GAAP" />
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1228" NodeText="Gross Profit" />
</Group>
</Sheet>
<Sheet FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Model2">
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Key Financials">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1235" NodeText="Total Operating Expenses-GAAP" />
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1236" NodeText="EBITDA">
<BM FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" BMID="01" NodeText="BM_Test1" />
<BM FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" BMID="02" NodeText="BM_Test2" />
</LineItem>
</Group>
</Sheet>
</Nodes>';
DECLARE @XMLData XML = N'<Nodes>
<Sheet FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Model1">
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Consensus Model">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1225" NodeText="Net Revenue" />
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1226" NodeText="Cost of Revenue">
<BM FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" BMID="01" NodeText="As % of Net Revenue" />
<BM FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" BMID="02" NodeText="Year over Year Growth" />
</LineItem>
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Test Group1">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1225" NodeText="Test_Group_LI" />
</Group>
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Test Group2"/>
</Group>
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Segment Details">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1227" NodeText="Cost of Revenue-GAAP" />
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1228" NodeText="Gross Profit" />
</Group>
</Sheet>
<Sheet FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Model2">
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" NodeText="Key Financials">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1235" NodeText="Total Operating Expenses-GAAP" />
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" LineItemID="1236" NodeText="EBITDA">
<BM FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" BMID="01" NodeText="BM_Test1" />
<BM FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor="" BMID="02" NodeText="BM_Test2" />
</LineItem>
</Group>
</Sheet>
</Nodes>';
DECLARE @tblCSM_Details TABLE
(
[CSM_ID] [int] NOT NULL,
[ID] [int] IDENTITY(1,1) NOT NULL,
[ParentID] [int] NULL,
[Type] [varchar](30) NULL,
[DisplayInCSM] [varchar](200) NULL,
[FontName] [varchar](max) NULL,
[FontStyle] [varchar](max) NULL,
[FontSize] [varchar](max) NULL,
[UnderLine] [varchar](max) NULL,
[BGColor] [varchar](max) NULL,
[LineItemID] [int] NULL,
[BMID] [int] NULL,
[ColOrder] [int] NULL
);
DECLARE @SheetID INT,@GroupID INT,@LineItemID INT, @BMID INT;
DECLARE @SheetStartIndex INT, @SheetCount INT;
DECLARE @GroupStartIndex INT, @GroupCount INT;
DECLARE @LineitemStartIndex INT, @LineitemCount INT;
DECLARE @BMStartIndex INT, @BMCount INT;
SET @SheetStartIndex = 1;
SET @SheetCount = @XMLData.value('count(/Nodes/Sheet)', 'INT');
WHILE @SheetStartIndex <= @SheetCount BEGIN --Inserting sheet data
INSERT INTO @tblCSM_Details(CSM_ID,[ParentID],[Type],[DisplayInCSM],[FontName],[FontStyle],[FontSize],[UnderLine],[BGColor],[LineItemID],[BMID],[ColOrder])
SELECT 1,0, c.value('local-name(.)','VARCHAR(30)') --'SHEET'
, c.value('@NodeText', 'VARCHAR(MAX)')
, c.value('@FontName', 'VARCHAR(MAX)')
, c.value('@FontStyle', 'VARCHAR(MAX)')
, c.value('@FontSize', 'VARCHAR(MAX)')
, c.value('@UnderLine', 'VARCHAR(MAX)')
, c.value('@BGColor', 'VARCHAR(MAX)')
, 0,0, @SheetStartIndex
FROM @XMLData.nodes('/Nodes/Sheet[position() = sql:variable("@SheetStartIndex")]') AS t(c);
SELECT @SheetID = SCOPE_IDENTITY();
--Inserting Group data
SET @GroupStartIndex = 1;
SET @GroupCount = @XMLData.value('count(/Nodes/Sheet[position() = sql:variable("@SheetStartIndex")]/Group)', 'INT');
WHILE @GroupStartIndex <= @GroupCount BEGIN --Inserting Group data
INSERT INTO @tblCSM_Details(CSM_ID,[ParentID],[Type],[DisplayInCSM],[FontName],[FontStyle],[FontSize],[UnderLine],[BGColor],[LineItemID],[BMID],[ColOrder])
SELECT 1,@SheetID, c.value('local-name(.)','VARCHAR(30)') --'GROUP'
, c.value('@NodeText', 'VARCHAR(MAX)')
, c.value('@FontName', 'VARCHAR(MAX)')
, c.value('@FontStyle', 'VARCHAR(MAX)')
, c.value('@FontSize', 'VARCHAR(MAX)')
, c.value('@UnderLine', 'VARCHAR(MAX)')
, c.value('@BGColor', 'VARCHAR(MAX)')
, 0,0, @GroupStartIndex
FROM @XMLData.nodes('/Nodes/Sheet[position() = sql:variable("@SheetStartIndex")]/Group[position() = sql:variable("@GroupStartIndex")]') AS t(c);
SELECT @GroupID = SCOPE_IDENTITY();
--Inserting LineItem data
SET @LineitemStartIndex = 1;
SET @LineitemCount = @XMLData.value('count(/Nodes/Sheet[position() = sql:variable("@SheetStartIndex")]/Group[position() = sql:variable("@GroupStartIndex")]/LineItem)', 'INT');
WHILE @LineitemStartIndex <= @LineitemCount BEGIN
INSERT INTO @tblCSM_Details(CSM_ID,[ParentID],[Type],[DisplayInCSM],[FontName],[FontStyle],[FontSize],[UnderLine],[BGColor],[LineItemID],[BMID],[ColOrder])
SELECT 1,@GroupID, c.value('local-name(.)','VARCHAR(30)') --'LINEITEM'
, c.value('@NodeText', 'VARCHAR(MAX)')
, c.value('@FontName', 'VARCHAR(MAX)')
, c.value('@FontStyle', 'VARCHAR(MAX)')
, c.value('@FontSize', 'VARCHAR(MAX)')
, c.value('@UnderLine', 'VARCHAR(MAX)')
, c.value('@BGColor', 'VARCHAR(MAX)')
, c.value('@LineItemID', 'INT')
, 0, @LineitemStartIndex
FROM @XMLData.nodes('/Nodes/Sheet[position() = sql:variable("@SheetStartIndex")]/Group[position() = sql:variable("@GroupStartIndex")]/LineItem[position() = sql:variable("@LineitemStartIndex")]') AS t(c);
SELECT @LineItemID = SCOPE_IDENTITY();
--Inserting BM data
SET @BMStartIndex = 1;
SET @BMCount = @XMLData.value('count(/Nodes/Sheet[position() = sql:variable("@SheetStartIndex")]/Group[position() = sql:variable("@GroupStartIndex")]/LineItem[position() = sql:variable("@LineitemStartIndex")]/BM)', 'INT');
WHILE @BMStartIndex <= @BMCount BEGIN --Inserting sheet data
INSERT INTO @tblCSM_Details(CSM_ID,[ParentID],[Type],[DisplayInCSM],[FontName],[FontStyle],[FontSize],[UnderLine],[BGColor],[LineItemID],[BMID],[ColOrder])
SELECT 1,@LineItemID, c.value('local-name(.)','VARCHAR(30)') --BM
, c.value('@NodeText', 'VARCHAR(MAX)')
, c.value('@FontName', 'VARCHAR(MAX)')
, c.value('@FontStyle', 'VARCHAR(MAX)')
, c.value('@FontSize', 'VARCHAR(MAX)')
, c.value('@UnderLine', 'VARCHAR(MAX)')
, c.value('@BGColor', 'VARCHAR(MAX)')
, 0
, c.value('@BMID', 'INT')
, @BMStartIndex
FROM @XMLData.nodes('/Nodes/Sheet[position() = sql:variable("@SheetStartIndex")]/Group[position() = sql:variable("@GroupStartIndex")]/LineItem[position() = sql:variable("@LineitemStartIndex")]/BM[position() = sql:variable("@BMStartIndex")]') AS t(c);
SET @BMStartIndex += 1;
END;
SET @LineitemStartIndex += 1;
END;
SET @GroupStartIndex += 1;
END;
SET @SheetStartIndex += 1;
END;
SELECT * FROM @tblCSM_Details;
DECLARE @XMLData XML =
N'<Nodes>
<Sheet FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor=""
NodeText="Model1">
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor=""
NodeText="Consensus Model">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" LineItemID="1225" NodeText="Net Revenue"/>
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" LineItemID="1226" NodeText="Cost of Revenue">
<BM FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" BMID="01" NodeText="As % of Net Revenue"/>
<BM FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" BMID="02" NodeText="Year over Year Growth"/>
</LineItem>
<Group FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" NodeText="Test Group1">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" LineItemID="1225" NodeText="Test_Group_LI"/>
</Group>
<Group FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" NodeText="Test Group2"/>
</Group>
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor=""
NodeText="Segment Details">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" LineItemID="1227"
NodeText="Cost of Revenue-GAAP"/>
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" LineItemID="1228" NodeText="Gross Profit"/>
</Group>
</Sheet>
<Sheet FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor=""
NodeText="Model2">
<Group FontName="" FontStyle="" FontSize="" UnderLine="false" BGColor=""
NodeText="Key Financials">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" LineItemID="1235"
NodeText="Total Operating Expenses-GAAP"/>
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" LineItemID="1236" NodeText="EBITDA">
<BM FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" BMID="01" NodeText="BM_Test1"/>
<BM FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" BMID="02" NodeText="BM_Test2"/>
</LineItem>
</Group>
</Sheet>
</Nodes>';
WITH Sheets AS
(
SELECT 'Sheet' AS [Type]
,ROW_NUMBER() OVER(ORDER BY A.sh) AS Id
,REPLACE(STR(ROW_NUMBER() OVER(ORDER BY A.sh),2),' ','0') AS SortString
,sh.query('.') Content
FROM @XMLData.nodes('/Nodes/Sheet') A(sh)
)
,SheetGroups AS
(
SELECT sh.* FROM Sheets sh
UNION ALL
SELECT 'Group'
,ROW_NUMBER() OVER(PARTITION BY sh.SortString ORDER BY A.gr)
,CONCAT(sh.SortString,REPLACE(STR(ROW_NUMBER() OVER(PARTITION BY sh.SortString ORDER BY A.gr),2),' ','0'))
,gr.query('.')
FROM Sheets sh
OUTER APPLY Content.nodes('Sheet/Group') A(gr)
)
,LineItems AS
(
SELECT shgr.* FROM SheetGroups shgr
UNION ALL
SELECT 'LineItem'
,ROW_NUMBER() OVER(PARTITION BY shgr.SortString ORDER BY A.li)
,CONCAT(shgr.SortString,REPLACE(STR(ROW_NUMBER() OVER(PARTITION BY shgr.SortString ORDER BY A.li),2),' ','0'))
,li.query('.')
FROM SheetGroups shgr
OUTER APPLY Content.nodes('Group/LineItem') A(li)
)
,BMs AS
(
SELECT li.* FROM LineItems li
UNION ALL
SELECT 'BM'
,ROW_NUMBER() OVER(PARTITION BY li.SortString ORDER BY A.bm)
,CONCAT(li.SortString,REPLACE(STR(ROW_NUMBER() OVER(PARTITION BY li.SortString ORDER BY A.bm),2),' ','0'))
,bm.query('.')
FROM LineItems li
OUTER APPLY Content.nodes('LineItem/BM') A(bm)
)
,FinalList AS
(
SELECT 1 AS CSM_ID
,ROW_NUMBER() OVER(ORDER BY BMs.SortString) AS ID
,BMs.SortString
,BMs.[Type]
,BMs.Content.value('(/*/@NodeText)[1]','varchar(max)') As DisplayInCSM
,BMs.Content.value('(/*/@FontName)[1]','varchar(max)') As FontName
,BMs.Content.value('(/*/@FontStyle)[1]','varchar(max)') AS FontStyle
,BMs.Content.value('(/*/@FontSize)[1]','varchar(max)') AS FontSize
,BMs.Content.value('(/*/@UnderLine)[1]','varchar(max)') AS UnderLine
,BMs.Content.value('(/*/@BGColor)[1]','varchar(max)') AS BGColor
,BMs.Content.value('(/*/@LineItemID)[1]','varchar(max)') AS LineItemID
,BMs.Content.value('(/*/@BMID)[1]','varchar(max)') AS BMID
,BMs.Id AS ColOrder
FROM BMs
WHERE Content IS NOT NULL
)
SELECT f1.CSM_ID
,f1.ID
,(SELECT f2.ID FROM FinalList f2 WHERE f2.SortString=LEFT(f1.SortString,LEN(f1.SortString)-2))
,f1.[Type]
,f1.DisplayInCSM
,f1.FontName
,f1.FontStyle
,f1.FontSize
,f1.UnderLine
,f1.BGColor
,f1.LineItemID
,f1.BMID
,f1.ColOrder
FROM FinalList f1
ORDER BY SortString;
<Group FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" NodeText="Test Group1">
<LineItem FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" LineItemID="1225" NodeText="Test_Group_LI"/>
</Group>
<Group FontName="" FontStyle="" FontSize="" UnderLine="false"
BGColor="" NodeText="Test Group2"/>
WITH Sheets AS
(
SELECT 'Sheet' AS [Type]
,ROW_NUMBER() OVER(ORDER BY A.sh) AS Id
,REPLACE(STR(ROW_NUMBER() OVER(ORDER BY A.sh),2),' ','0') AS SortString
,sh.query('.') Content
FROM @XMLData.nodes('/Nodes/Sheet') A(sh)
)
,SheetGroups AS
(
SELECT sh.* FROM Sheets sh
UNION ALL
SELECT 'Group'
,ROW_NUMBER() OVER(PARTITION BY sh.SortString ORDER BY A.gr)
,CONCAT(sh.SortString,REPLACE(STR(ROW_NUMBER() OVER(PARTITION BY sh.SortString ORDER BY A.gr),2),' ','0'))
,gr.query('.')
FROM Sheets sh
OUTER APPLY Content.nodes('Sheet/Group') A(gr)
)
,LineItems AS
(
SELECT shgr.* FROM SheetGroups shgr
UNION ALL
SELECT 'LineItem'
,ROW_NUMBER() OVER(PARTITION BY shgr.SortString ORDER BY A.li)
,CONCAT(shgr.SortString,REPLACE(STR(ROW_NUMBER() OVER(PARTITION BY shgr.SortString ORDER BY A.li),2),' ','0'))
,li.query('.')
FROM SheetGroups shgr
OUTER APPLY Content.nodes('Group/LineItem') A(li)
)
,BMs AS
(
SELECT li.* FROM LineItems li
UNION ALL
SELECT 'BM'
,ROW_NUMBER() OVER(PARTITION BY li.SortString ORDER BY A.bm)
,CONCAT(li.SortString,REPLACE(STR(ROW_NUMBER() OVER(PARTITION BY li.SortString ORDER BY A.bm),2),' ','0'))
,bm.query('.')
FROM LineItems li
OUTER APPLY Content.nodes('LineItem/BM') A(bm)
)
,FinalList AS
(
SELECT 1 AS CSM_ID
,ROW_NUMBER() OVER(ORDER BY BMs.SortString) AS ID
,BMs.SortString
,BMs.[Type]
,BMs.Content.value('(/*/@NodeText)[1]','varchar(max)') As DisplayInCSM
,BMs.Content.value('(/*/@FontName)[1]','varchar(max)') As FontName
,BMs.Content.value('(/*/@FontStyle)[1]','varchar(max)') AS FontStyle
,BMs.Content.value('(/*/@FontSize)[1]','varchar(max)') AS FontSize
,BMs.Content.value('(/*/@UnderLine)[1]','varchar(max)') AS UnderLine
,BMs.Content.value('(/*/@BGColor)[1]','varchar(max)') AS BGColor
,BMs.Content.value('(/*/@LineItemID)[1]','varchar(max)') AS LineItemID
,BMs.Content.value('(/*/@BMID)[1]','varchar(max)') AS BMID
,BMs.Id AS ColOrder
FROM BMs
WHERE Content IS NOT NULL
)
SELECT f1.CSM_ID
,f1.ID
,(SELECT f2.ID FROM FinalList f2 WHERE f2.SortString=LEFT(f1.SortString,LEN(f1.SortString)-2))
,f1.[Type]
,f1.DisplayInCSM
,f1.FontName
,f1.FontStyle
,f1.FontSize
,f1.UnderLine
,f1.BGColor
,f1.LineItemID
,f1.BMID
,f1.ColOrder
FROM FinalList f1
ORDER BY SortString;