0

フィールドに値が含まれていない場合でも(値がnullまたは空であっても)、クエリで選択したテーブルからすべてのフィールドを取得したい。以下は私が書いたクエリです。

SELECT (
           SELECT T1.[CarrierCode_Destination] AS '@CarrierCode_Destination',
                  T1.[CarrierCode_Destination_Address] AS 
                  '@CarrierCode_Destination_Address',
                  T1.[CarrierCode_Destination_Address1] AS 
                  '@CarrierCode_Destination_Address1',
                  T1.[CarrierCode_Destination_Address2] AS 
                  '@CarrierCode_Destination_Address2',
                  T1.[CIMtrek_RegContact] AS '@CIMtrek_RegContact',
                  T1.[CIMtrek_CarrierContact] AS '@CIMtrek_CarrierContact',
                  [T1].[CIMtrek_AdditionalContacts] AS 
                  '@CIMtrek_AdditionalContacts'
           FROM   (
                      SELECT CD.[CIMtrek_DestinationName] 
                             CarrierCode_Destination,
                             CD.[CIMtrek_DestinationAdd] 
                             CarrierCode_Destination_Address,
                             CD.[CIMtrek_DestinationAdd_1] 
                             CarrierCode_Destination_Address1,
                             CD.[CIMtrek_DestinationAdd_2] 
                             CarrierCode_Destination_Address2,
                             CD.[CIMtrek_RegContact] CIMtrek_RegContact,
                             CD.[CIMtrek_CarrierContact] CIMtrek_CarrierContact,
                             CD.[CIMtrek_AdditionalContacts] 
                             CIMtrek_AdditionalContacts
                      FROM   CIMtrek_SystemTable_DatawareHouse CD
                      WHERE  LEN(
                                 LTRIM(
                                     RTRIM(ISNULL(LTRIM(RTRIM(CD.[CIMtrek_DestinationName])), ''))
                                 )
                             ) != 0
                  ) AS T1 
                  FOR XML PATH('Record'),
                  TYPE
       ) FOR XML PATH('CarrierCode_Destination'),
       TYPE

私が得る結果は

<CarrierCode_Destination>
  <Record CarrierCode_Destination="8S - San Fran" CarrierCode_Destination_Address="SAN FRANCISCO  -  Redistribution" CarrierCode_Destination_Address1="4025 Whipple Road, " CarrierCode_Destination_Address2="Union City CA  94587" CIMtrek_RegContact="RDC San Francisco" />
  <Record CarrierCode_Destination="8G - St Louis" CarrierCode_Destination_Address="ST. LOUIS  -  Redistribution" CarrierCode_Destination_Address1="126 Enterprise  Drive, " CarrierCode_Destination_Address2="Wentzville MO  63385" CIMtrek_RegContact="RDC St Louis" />
  <Record CarrierCode_Destination="V8     PHO/CYPR/CUST/TL  " />
</CarrierCode_Destination>

しかし、クエリで選択されているすべてのフィールドが必要です。結果が表示されると、値のあるフィールドが表示され、値のないフィールドは省略されます。

これを行う方法、助けてください。

よろしくお願いします

4

2 に答える 2

1

isnull()選択する列ごとにステートメントを使用し、null 値を空の文字列に変換する場合、すべての列に対して属性が強制的に生成されるはずです。rtrim()固定サイズの文字列を返すデータ型があるかどうかに応じて、以下に示すようなステートメントを追加する必要がある場合とない場合があります。

SELECT (
       SELECT rtrim(isnull(T1.[CarrierCode_Destination],'')) AS '@CarrierCode_Destination',
              rtrim(isnull(T1.[CarrierCode_Destination_Address],'')) AS 
              '@CarrierCode_Destination_Address',
              rtrim(IsNull(T1.[CarrierCode_Destination_Address1],'')) AS 
              '@CarrierCode_Destination_Address1',
              rtrim(IsNull(T1.[CarrierCode_Destination_Address2],'')) AS 
              '@CarrierCode_Destination_Address2',
              rtrim(IsNull(T1.[CIMtrek_RegContact],'')) AS '@CIMtrek_RegContact',
              rtrim(IsNull(T1.[CIMtrek_CarrierContact],'')) AS '@CIMtrek_CarrierContact',
              rtrim(IsNull([T1].[CIMtrek_AdditionalContacts],'')) AS 
              '@CIMtrek_AdditionalContacts'
       FROM   (
                  SELECT CD.[CIMtrek_DestinationName] 
                         CarrierCode_Destination,
                         CD.[CIMtrek_DestinationAdd] 
                         CarrierCode_Destination_Address,
                         CD.[CIMtrek_DestinationAdd_1] 
                         CarrierCode_Destination_Address1,
                         CD.[CIMtrek_DestinationAdd_2] 
                         CarrierCode_Destination_Address2,
                         CD.[CIMtrek_RegContact] CIMtrek_RegContact,
                         CD.[CIMtrek_CarrierContact] CIMtrek_CarrierContact,
                         CD.[CIMtrek_AdditionalContacts] 
                         CIMtrek_AdditionalContacts
                  FROM   CIMtrek_SystemTable_DatawareHouse CD
                  WHERE  LEN(
                             LTRIM(
                                 RTRIM(ISNULL(LTRIM(RTRIM(CD.[CIMtrek_DestinationName])), ''))
                             )
                         ) != 0
              ) AS T1 
              FOR XML PATH('Record'),
              TYPE
   ) FOR XML PATH('CarrierCode_Destination'),
   TYPE

テストしたときはうまくいきましたが、空の値が属性を生成しないという問題もある場合は、最初にNULL、元のデータテーブルに対する選択からすべての空の値を強制的に返すことができますNULLIF()

SELECT (
       SELECT rtrim(isnull(T1.[CarrierCode_Destination],'')) AS '@CarrierCode_Destination',
              rtrim(isnull(T1.[CarrierCode_Destination_Address],'')) AS 
              '@CarrierCode_Destination_Address',
              rtrim(IsNull(T1.[CarrierCode_Destination_Address1],'')) AS 
              '@CarrierCode_Destination_Address1',
              rtrim(IsNull(T1.[CarrierCode_Destination_Address2],'')) AS 
              '@CarrierCode_Destination_Address2',
              rtrim(IsNull(T1.[CIMtrek_RegContact],'')) AS '@CIMtrek_RegContact',
              rtrim(IsNull(T1.[CIMtrek_CarrierContact],'')) AS '@CIMtrek_CarrierContact',
              rtrim(IsNull([T1].[CIMtrek_AdditionalContacts],'')) AS 
              '@CIMtrek_AdditionalContacts'
       FROM   (
                  SELECT NullIF(CD.[CIMtrek_DestinationName],'') 
                         CarrierCode_Destination,
                         NullIF(CD.[CIMtrek_DestinationAdd],'') 
                         CarrierCode_Destination_Address,
                         NullIF(CD.[CIMtrek_DestinationAdd_1],'') 
                         CarrierCode_Destination_Address1,
                         NullIF(CD.[CIMtrek_DestinationAdd_2],'') 
                         CarrierCode_Destination_Address2,
                         NullIF(CD.[CIMtrek_RegContact],'') CIMtrek_RegContact,
                         NullIF(CD.[CIMtrek_CarrierContact],'') CIMtrek_CarrierContact,
                         NullIF(CD.[CIMtrek_AdditionalContacts],'') 
                         CIMtrek_AdditionalContacts
                  FROM   CIMtrek_SystemTable_DatawareHouse CD
                  WHERE  LEN(
                             LTRIM(
                                 RTRIM(ISNULL(LTRIM(RTRIM(CD.[CIMtrek_DestinationName])), ''))
                             )
                         ) != 0
              ) AS T1 
              FOR XML PATH('Record'),
              TYPE
   ) FOR XML PATH('CarrierCode_Destination'),
   TYPE
于 2013-01-25T08:18:05.667 に答える
0

私は通常、次の構文を使用します。

SELECT *
FROM   TABLE_NAME
WHERE  FIELD_NAME = "CRITERIA"
于 2013-01-25T06:52:10.720 に答える