0

このクエリを実行しようとしていますが、次のエラーが発生し続けます。

INSERT ステートメントの選択リストには、挿入リストよりも多くの項目が含まれています。SELECT 値の数は、INSERT 列の数と一致する必要があります。

このエラーは、INSERT INTO #tempTable SELECT を実行しようとした後に発生します。一時テーブルごとに 2 つの列しかないときは問題なく機能しましたが、3 つ目の列を追加したので、このエラーが発生し続けます。 3列のテーブルに挿入するために3列を選択しているようです。

クエリ全体では、いくつかの列の値 (顧客 ID、連絡先、およびセールスマン ID) を異なるテーブルから取得しようとしていますが、問題は、重複する顧客 ID を根絶し、1 人のセールスマンと 1 つの連絡先のみを確認する必要があることに起因しています。顧客ごとに表示されます。販売者 ID がなければ、クエリは完全に機能します。これが私がこれまでに持っているものです:

if object_id('tempdb..#tempTable') IS NOT NULL DROP TABLE #tempTable
if object_id('tempdb..#tempTable2') IS NOT NULL DROP TABLE #tempTable2

CREATE TABLE #tempTable(
CustomerID int,
ContactName nvarchar(50),
SalesmenID nvarchar(4)
)

CREATE TABLE #tempTable2(
CustomerID int,
ContactName nvarchar(50),
SalesmenID nvarchar(4)
)


INSERT INTO #tempTable 
    (CustomerID, ContactName,SalesmenID)
    SELECT Customers.[Customer ID],Salesmen.[4 Letter ID],
    CASE([Customer Contact].defaultprintonorder) 
        WHEN 0 
        THEN 'zzzzzzz_NOCONTACT'
        ELSE
        [Customer Contact].[Contact Name]
        END as ContactName
    From Customers
    LEFT JOIN [Customer Contact] on Customers.[Customer ID]=[Customer Contact].[Customer ID]
    Left Join [Customer Salesmen] On Customers.[Customer ID]=[Customer Salesmen].[Customer ID]
    INNER JOIN Salesmen on [Customer Salesmen].[Salesman Name]=Salesmen.[Salesman Name]
WHERE Customers.[Customer ID] NOT IN(SELECT CustomerID FROM #tempTable)
GROUP BY Customers.[Customer ID], [Contact Name], DefaultPrintOnOrder


INSERT INTO #tempTable2  (CustomerID, ContactName,SalesmenID)
SELECT distinct CustomerID, '', SalesmenID FROM #tempTable 

UPDATE  #TempTable2 SET 
    #tempTable2.CustomerID=#tempTable.CustomerID, 
    #tempTable2.ContactName=#tempTable.ContactName
FROM 
    #TempTable2
    INNER JOIN #TempTable ON #TempTable2.CustomerID=#TempTable.CustomerID

SELECT Salesmen.[4 Letter ID],
       [Customers].[Customer ID], 
       [Customer Contact].[Contact Name]
FROM Customers
Right JOIN #TempTable2 ON
    Customers.[Customer ID]=#TempTable2.CustomerID
Right JOIN [Customer Salesmen] ON
    #TempTable2.CustomerID=[Customer Salesmen].[Customer ID]
INNER JOIN  
    [Salesmen] ON
    [Customer Salesmen].[Salesman Name]=Salesmen.[Salesman Name]
LEFT JOIN 
    [Customer Contact] ON
    #TempTable2.[CustomerID]=[Customer Contact].[Customer ID]

編集: 挿入に SalesmenID を追加しましたが、このエラー メッセージが 3 回表示されます。

列名 'SalesmenID' が無効です。

temptable 挿入の場合は 1 回、temptable2 挿入の場合は 2 回表示されます

4

2 に答える 2

3

3 つの値 (Customers.[Customer ID]、Salesmen.[4 Letter ID]、ContactName) を 2 つのフィールド (CustomerID、ContactName) に保存しようとしています。

    INSERT INTO #tempTable 
    (CustomerID, ContactName)
    SELECT Customers.[Customer ID],Salesmen.[4 Letter ID],
    CASE([Customer Contact].defaultprintonorder) 
    WHEN 0 
    THEN 'zzzzzzz_NOCONTACT'
    ELSE
    [Customer Contact].[Contact Name]
    END as ContactName
于 2012-06-06T21:07:41.847 に答える
1

問題はあなたが示した場所にあると確信していますか?

この挿入には、2つの宛先列と3つの選択列があります。

INSERT INTO #tempTable 
    (CustomerID, ContactName)    -- 2 columns

    SELECT Customers.[Customer ID], --column 1
            Salesmen.[4 Letter ID], --column 2
    CASE([Customer Contact].defaultprintonorder) -- column 3!
        WHEN 0 
        THEN 'zzzzzzz_NOCONTACT'
        ELSE
        [Customer Contact].[Contact Name]
        END as ContactName
    From Customers...
于 2012-06-06T21:05:09.430 に答える