0

ここにいくつかのサンプルレコードがあります

ID(UniqueIdentifier)                 UserId title   description version     parentid    
8362AB94-946F-4092-97C2-ABD957CC2E20    3   title   desc    0   0   
C4E3FCC1-49B5-4310-931F-B8EE48B3F38E    3   title2  desc2   0   1           8362AB94-946F-4092-97C2-ABD957CC2E20
C622113B-C6E6-4ED1-B727-E4F864643CD2    3   title3  desc3   0   2           8362AB94-946F-4092-97C2-ABD957CC2E20

レコードは、テキスト データの階層的な編集を表します。1たとえば、ParentBoard の編集を保存すると、新しいエントリが作成され、バージョン番号が増分2されます (これはすべてアプリケーションで発生します)。ここでの関心のある列は

ID - Unique Identifier

ParentId - NVARCHAR(50)

次のようにxmlを構築しようとしています

<Edits>
  <Id>314BA459-3749-4BC1-8AA4-E72B882539F5</Id>
  <Title>Parent Title</Title>
  <Description>Parent Description</Description>
  <Version>0</Version>
  <ParentId></ParentId>
  <SubBoardCount>2</SubBoardCount>
</Edits>

クエリ

SELECT
            Id  'Id',
            Title   'Title',
            [Description]   'Description',
            Version     'Version',
            ParentId    'ParentId',
            (select COUNT(*) WHERE ParentId =  (CAST(Id AS NVARCHAR(50)))) 'SubBoardCount',
    FROM    Edits
    WHERE ParentId IS NULL OR ParentId = ''
    FOR XML PATH('Edits')

問題

なぜ私はいつもSubBoardCount as 02ではなく得られるのですか?

4

1 に答える 1

3

「サブクエリ」がテーブルを検索していないためです。おそらくあなたは意味しました:

SELECT
    Id 'Id',
    Title 'Title',
    [Description] 'Description',
    Version 'Version',
    ParentId 'ParentId',
    (SELECT COUNT(*) 
     FROM Edits e2 
     WHERE e2.ParentId =  (CAST(e1.Id AS NVARCHAR(50)))) 'SubBoardCount',
FROM    
    Edits e1
WHERE 
    ParentId IS NULL OR ParentId = ''
FOR XML PATH('Edits')

追加のFROM Edits e2句がない場合、サブクエリへの参照ParentIdIdサブクエリ内の参照は、(エイリアスを作成したため)からの列値を参照していe1ましたが、これらは同じではありません。

于 2011-12-14T11:12:50.787 に答える