簡體   English   中英

結合這兩個SQL查詢

[英]Combining these two SQL Queries

我在合並這兩個SQL查詢時遇到麻煩。 我有這個原始查詢,它從兩個表中選擇數據,相關的列是Tasks.CustomerID和Customers.CustomerID。 這基本上是任務。* + Customer.Name

ALTER PROCEDURE [dbo].[SP_SelectTasksandName]
AS
SELECT TASKS.CustomerID, TASKS.DateCreation, TASKS.DateFinish, TASKS.Description, TASKS.Fees, TASKS.Hours, TASKS.InvoiceNum, TASKS.PaymentMethod,
        TASKS.Status, TASKS.TaskID, CUSTOMERS.Name
FROM TASKS, CUSTOMERS
WHERE (TASKS.CustomerID LIKE CUSTOMERS.CustomerID)

這可行,但是現在我被要求將查詢限制為指定的行數。 我發現此代碼對我的其他更簡單的查詢非常有效,但似乎無法在此查詢中正確使用它。 該限制代碼如下。 (即所有行> @low &&行<= @high)

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY CustomerID) as row FROM CUSTOMERS
    ) a WHERE ((a.row > @low and a.row <= @high) 

這是我得到的最接近的東西,但是我被困在這里。

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY TASKS.CustomerID) as row FROM 
        (SELECT TASKS.CustomerID, TASKS.DateCreation, TASKS.DateFinish, TASKS.Description, TASKS.Fees, TASKS.Hours, TASKS.InvoiceNum, TASKS.PaymentMethod,
                TASKS.Status, TASKS.TaskID, CUSTOMERS.Name
        FROM TASKS, CUSTOMERS
        WHERE (TASKS.CustomerID LIKE CUSTOMERS.CustomerID))

) a WHERE (a.row > @low and a.row <= @high)

在最后一行的第一個括號中出現錯誤“期望為id或帶引號的id”。

很抱歉出現菜鳥問題,感謝您提供的任何幫助。

請勿FROM子句中使用逗號。 始終使用正確的顯式JOIN語法。

您要查找的查詢可以寫為:

SELECT tc.*
FROM (SELECT t.CustomerID, t.DateCreation, t.DateFinish, t.Description, 
             t.Fees, t.Hours, t.InvoiceNum, t.PaymentMethod,
             t.Status, t.TaskID, c.Name,
             ROW_NUMBER() OVER (ORDER BY t.CustomerID) as seqnum
        FROM TASKS t JOIN
             CUSTOMERS c
             ON t.CustomerID = c.CustomerID
     ) tc
WHERE tc.seqnum > @low ANDtc.seqnum <= @high

我將查詢編寫如下:

;With CTE
As
(
    SELECT
        TASKS.CustomerID, 
        TASKS.DateCreation, 
        TASKS.DateFinish, 
        TASKS.Description, 
        TASKS.Fees, 
        TASKS.Hours, 
        TASKS.InvoiceNum, 
        TASKS.PaymentMethod,
        TASKS.Status, 
        TASKS.TaskID, 
        CUSTOMERS.Name, 
        Row_Number() over (Partition By Tasks.CustomerID Order by Tasks.CustomerID) as RN
    FROM TASKS
        Inner Join CUSTOMERS
            on (TASKS.CustomerID = CUSTOMERS.CustomerID)
    )
select *   -- just being lazy here - in production code you ALWAYS use an explicit field list
from CTE
Where CTE.RN > @low and CTE.RN <= @high  -- or whatever logic you need

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM