3

SQL Server 2008 で foreach の状況を回避するために必死に努力しています (私のバックグラウンドは c# です)。

基本的に、SKU のリストがあります。リスト内の各 SKU について、その特定の SKU が Web に表示されるかどうかを判断する計算を実行する必要があります。

SKU のリストを取得するには、次を使用します。

SELECT Feed.StyleCode as SKU
FROM [eCommerce].[dbo].[BABW_ItemFeed] as Feed
WHERE Feed.ProductDefinition = 'Kit'

これを返す:

ここに画像の説明を入力

そして、各SKUフィールドを計算するために、私はこれを使用しています:

DECLARE @SKU AS varchar(50)
SET @SKU= '11993_16559_16227'
SELECT
    @SKU as SKU,
    0 AS Quantity,
    MIN(ISNULL(Sending.IsActive, 'WEBNO')) AS IsActive, 
    MAX(ISNULL(Sending.IsDiscontinued, 1)) AS IsDiscontinued
FROM
( 
    SELECT * FROM [eCommerce].[dbo].[Split] (
      @SKU
      ,'_') 
) AS SplitSkus 
LEFT JOIN #SkusToSend AS Sending
    ON Sending.SKU = SplitSkus.items

これを返す:

ここに画像の説明を入力

ここで、@SKU 宣言を削除して、2 つのテーブルを一緒に同期する必要があります。UNION を使用してこれを行うことはできないと思います。2 番目の関数には、処理する SKU の事前知識が必要であり、JOIN には結合する何かが必要になるためです。本当に持っています。ループ メカニズムなしで一度に SKU の完全なテーブルを作成するために使用できる、よく知らない関数はありますか?

4

2 に答える 2

4

CROSS APPLYの各行に対してUDFを実行する...を試してくださいBABW_ItemFeed

SELECT
    Feed.StyleCode as SKU,
    COUNT(*) AS Quantity,
    MIN(ISNULL(Sending.IsActive, 'WEBNO')) AS IsActive, 
    MAX(ISNULL(Sending.IsDiscontinued, 1)) AS IsDiscontinued
FROM
    [eCommerce].[dbo].[BABW_ItemFeed] as Feed 
    CROSS APPLY [eCommerce].[dbo].[Split] (Feed.StyleCode, '_') AS SplitSkus 
    LEFT JOIN #SkusToSend AS Sending
        ON Sending.SKU = SplitSkus.items
WHERE
    Feed.ProductDefinition = 'Kit'
GROUP BY
    Feed.StyleCode
于 2013-02-07T21:24:01.153 に答える
0

Min() と Max() の使用を停止するか、 SKU をプルします (SELECT でパラメーターを使用しないでください)。

これを試して:

SELECT
    SKU,
    0 AS Quantity,
    MIN(ISNULL(Sending.IsActive, 'WEBNO')) AS IsActive, 
    MAX(ISNULL(Sending.IsDiscontinued, 1)) AS IsDiscontinued
FROM
( 
SELECT [eCommerce].[dbo].[Split] (Feed.StyleCode,'_')  as SKU
FROM [eCommerce].[dbo].[BABW_ItemFeed] as Feed
WHERE Feed.ProductDefinition = 'Kit'
) AS SplitSkus 
LEFT JOIN #SkusToSend AS Sending
    ON Sending.SKU = SplitSkus.items
于 2013-02-07T21:20:36.797 に答える