0

市町村(親)のすべての住所(子)を取得するクエリを作成しましたが、空に戻ってきました/助けていただければ幸いです。

drop table #tmp1
go

WITH Emp_CTE AS (
SELECT tablesysID, MunicNo, StreetName       
FROM table1
UNION ALL
SELECT e.tablesysID,e.MunicNo,e.StreetName
FROM table1 e
INNER JOIN Emp_CTE ecte ON ecte.MunicNo = e.MunicNo
)
SELECT *  into  #tmp1
FROM Emp_CTE

select * from #tmp1

asp.netツリービューコントロールで使用されます。

Andomarの回答に感謝します。正解ですが、この問題をどのように解決したかを次のように共有したいと思います。

1:次のような応答としてxmlデータ型を返すストアドプロシージャとしてクエリを作成します。

create PROCEDURE [dbo].[sp_someproc]
    @XmlResponse xml output

AS
BEGIN
    --
    -- Insert statements for procedure here
set @XmlResponse=(SELECT DISTINCT 
               table1.MunicNo + ' ' + table1.StreetName + ' ' + table1.City AS firstRow, table1.MunicNo, table1.StreetName, table1.City, 
                table1.XPOS, table1.YPOS, table1.RollID, table2.Asset_ID, table2.Feature_ID, table2.FeatureName + ',' + table2.Feature_ID + ' ' + table2.[DESC] AS secondRow,
               table2.FeatureName, table2.xxxID, table2.[DESC],table3.WONOs, table3.WONOs + ', ' + table3.AssetType + ', ' +table3.Feature_ID AS workONumber
FROM  table4 INNER JOIN
               table3 ON table4.xxxxID = table3.xxxxID INNER JOIN
               table2 ON table4.Asset_ID = table2.xxx_ID INNER JOIN
               table1 ON table2.StreetName = table1.StreetName AND table3.MunicNo = table1.MunicNo
            for xml auto,root('xml'))
END
select @XmlResponse

2:Aspxページコード:

<telerik:RadTreeView ID="rtrvxxxxx" runat="server" >
          <DataBindings>
                        <telerik:RadTreeNodeBinding DataMember="table1" TextField="firstRow" ValueField="firstRow" />
                        <telerik:RadTreeNodeBinding DataMember="table2" TextField="secondRow"  />
                         <telerik:RadTreeNodeBinding DataMember="table3" TextField="workONumber"  />

          </DataBindings>               

        </telerik:RadTreeView>

3:C#コード:

private void loadXmlDocument()
        {
            try
            {
                #region Load and Bind xml to treeview

                XmlDataSource xDS = new XmlDataSource();
                XmlDocument xmlDoc = new XmlDocument();

                xmlDoc = callingdatalayerclass.list_XML();
                xDS.Data = xmlDoc.InnerXml;
                xDS.XPath = "/xml/table1";
                xDS.EnableCaching = false;


                //bind to treeview
                rtrvxxxx.DataSource = xDS;
                rtrvxxxx.DataBind();

                #endregion
            }
            catch (Exception ex)
            {
               ex.Message()}
            }
        }

4:データアクセス層コード:

public static XmlDocument List_XML()
                    {

                            XmlDocument xmlDoc = new XmlDocument();
                            SqlConnection SQLConn = new SqlConnection();
                            SQLConn.ConnectionString = someclass.someotherclass.GetConnectionString();
                            try
                           {
                            SQLConn.Open();
                            SqlCommand custCMD = new SqlCommand("sp_someproc", SQLConn);

                            custCMD.CommandType = CommandType.StoredProcedure;
                            custCMD.Parameters.Add("@XmlResponse", SqlDbType.Xml).Direction = ParameterDirection.Output;
                            custCMD.ExecuteNonQuery();

                            if (custCMD.Parameters["@XmlResponse"].Value != null)
                            {
                                string xml = custCMD.Parameters["@XmlResponse"].Value.ToString();

                                xmlDoc.LoadXml(xml);
                            }
                            return xmlDoc;

                        }
                        catch (Exception exGEN)
                        {
                            throw exGEN;
                        }
                        finally
                        {
                            SQLConn.Close();

                        }

                    }

注:クエリにツリービューの最初のレイヤーである行があり、2番目の行が1番目の行の内側の行であるか、親ノードの子と呼ぶことができる場合、3番目の行は2番目の行の内側の行または子の行であるため、1番目の行にレコードがある場合2番目の行にいくつかのreocrdがある場合、それを出力します。ツリービューのデータ結合セクションがテーブル名であり、textfiledが最初の行である場合、値フィールドは他の列である可能性があります。asp.netの元のツリービューを使用したことがないため、これがtelerikツリービュー制御でどのように機能するかわかりません。また、データをxmlとして選択すると、速度がはるかに速くなることもわかりました。"DS.XPath =" / xml / table1 ";" <=このコードはxml要素またはルート要素を選択し、その要素でデータによって並べ替えられる最初の要素を使用します(最初の行のレコードのテーブル)

4

1 に答える 1

2

再帰的な状態を見てください。

INNER JOIN Emp_CTE ecte ON ecte.MunicNo = e.MunicNo

これは同じ自治体に繰り返されます。(場合を除くMinicNo is null。)

適切な状態を見つけるのに十分な情報を投稿していませんが、次のようになります。

INNER JOIN Emp_CTE ecte ON ecte.tablesysID = e.MunicNo
于 2012-08-02T20:00:22.157 に答える