0

以下のクエリでは、Dense Rank 関数を nvarchar(255) としてキャストしたいのですが、構文エラーが発生しています。次の質問があります -

  1. 密ランク関数から返された値をキャストすることは可能ですか?
  2. はいの場合、構文は何ですか?

 SELECT cast('P' AS NVARCHAR(3))                                                                                                                                                                                                            AS ADDRESS_TYPE_CD,
       DENSE_RANK() OVER(PARTITION BY [CUSTOMER KEY] 
                             ORDER BY [PRIMARY ADDRESS LINE 1], 
                                      [PRIMARY ADDRESS LINE 2], 
                                      [PRIMARY ADDRESS LINE 3] + [PRIMARY ADDRESS LINE 4], 
                                      [PRIMARY CITY], 
                                      [PRIMARY STATE], 
                                      [PRIMARY ZIP], 
                                      [PRIMARY COUNTRY] ) AS ADDRESS_FLAG,
       [CUSTOMER KEY],
       [PRIMARY ADDRESS LINE 1]                                                                                                                                                                                                            AS PA1,
       CASE
         WHEN [PRIMARY ADDRESS LINE 1] = [PRIMARY ADDRESS LINE 2] THEN NULL
         ELSE [PRIMARY ADDRESS LINE 2]
       END                                                                                                                                                                                                                                 AS PA2,
       [PRIMARY ADDRESS LINE 3] + [PRIMARY ADDRESS LINE 4]                                                                                                                                                                                 AS PA3,
       [PRIMARY CITY]                                                                                                                                                                                                                      AS PCity,
       [PRIMARY STATE]                                                                                                                                                                                                                     AS PS,
       [PRIMARY ZIP]                                                                                                                                                                                                                       AS PZ,
       [PRIMARY COUNTRY]                                                                                                                                                                                                                   AS PC
FROM   mtb.DBO.EnrichedFile
WHERE  APPLICATION <> 'RBC' 
4

3 に答える 3

1
SELECT 
 CAST((DENSE_RANK() OVER(PARTITION BY [CUSTOMER KEY] 
                            ORDER BY [MAILING ADDRESS LINE 1],
                                     [MAILING ADDRESS LINE 2],
                                     [MAILING ADDRESS LINE 3]+[MAILING ADDRESS LINE 4],
                                     [MAILING CITY],
                                     [MAILING STATE],
                                     [MAILING ZIP],
                                     [MAILING COUNTRY]) as nvarchar(255)) AS ADDRESS_FLAG

する必要があります

SELECT 
 CAST(DENSE_RANK() OVER(PARTITION BY [CUSTOMER KEY] 
                            ORDER BY [MAILING ADDRESS LINE 1],
                                     [MAILING ADDRESS LINE 2],
                                     [MAILING ADDRESS LINE 3]+[MAILING ADDRESS LINE 4],
                                     [MAILING CITY],
                                     [MAILING STATE],
                                     [MAILING ZIP],
                                     [MAILING COUNTRY]) as nvarchar(255)) AS ADDRESS_FLAG

余分な開始ブラケットがあります。

とにかく、なぜこれをキャストしているのnvarchar(255)ですか?

9223372036854775807文字列として使用する正当な理由がある場合でも、可能な最大値でvarchar(19)十分です。

于 2014-03-07T15:21:19.553 に答える
0

どうぞ:

SELECT CAST(ADDRESS_FLAG AS NVARCHAR(255)) AS ADDRESS_FLAG_STR,
       --... blah blah blah
FROM
(
 SELECT --.. blah blah blah
        DENSE_RANK() ... blah blah ...  AS ADDRESS_FLAG,
        --... blah blah blah
) SUB

OVER 関数を使用して、それらを操作する前にサブクエリに入れる必要があることがわかりました。通常のフィールドであるかのようにできることがいくつかあります。クエリが機能するようになったら、いつでもリファクタリングできます。

于 2014-03-07T15:10:33.503 に答える