2016-08-24 72 views
1

我有一個表的「產品」有N個記錄(超過5000個,並隨時更改號碼)拆表的記錄。我如何根據表生成兩個查詢,一個用於上半部分記錄,另一個用於另一半?訪問 - 我怎樣才能在兩個查詢

+0

您是否有標識記錄ID(流水號從1到n,爲n的記錄數)表中的任意列? – FDavidov

+0

如何區分上半年和下半年,記住記錄順序在數據庫中沒有意義? –

+0

嗨!我有一個IDNumber,但我需要在查詢中使用另一個標準。我認爲在Count記錄中將記錄數除以2(生成一個N整數),在查詢中選擇第一個查詢中記錄的N個頂部,並創建第二個不匹配的查詢。 表格的結構是: 1.Id-Autonumber 2.ProductName-Text 3.價格 – KEOC

回答

1

使用(有沒有遺漏的數字順序編號,或至少一個字段),這可能工作的自動編號主鍵 - 雖然我還沒有真正想通了,可能是幾個陷阱?

返回ID號的前半部分:

SELECT ID 
FROM Table1 
WHERE ID<=INT((SELECT MAX(ID) FROM Table1)/2) 

返回ID號碼下半年:

SELECT ID 
FROM Table1 
WHERE ID>INT((SELECT MAX(ID) FROM Table1)/2) 
+0

它確實可以工作,但很少有自動編號ID不會丟失。這是純SQL中唯一可行的方法,但不可靠 –

+0

同意,絕對不可靠。 –

+0

@Darren Bartup庫克 非常感謝達倫但我不能使用id-自動編號,這是因爲在查詢中我用另一種標準的「類別」。 表結構如下: ID -Auto 類別編號 產品-Txt Price-Curr。 當輸入數據被隨機插入 標識產品\t類別\t價格 1. 1. \t \t蘋果\t \t $ 1.00包裝 2. 2. \t \t兔\t \t $ 4.00 3. 3. \t \t奶酪\t \t $ 8.00 4. 2. \t \t \t雞3.10 $ 5. 1. \t \t \t櫻桃\t $ 2.50 如果我選擇類別 「1」 的結果: 標識產品\t類別\t價格 1. 1. \t \t蘋果\t \t $ 1.00包裝 5. 1. \t \t櫻桃\t \t $ 2.00 我有兩個REC但最大Id是5 .. – KEOC

0

的問題是,你不能指定一個COUNT(*)的結果子查詢在TOP指令,所以不可能在純SQL

可靠地做到這一點100% 10

可靠的方法是用VBA預先建立你2個查詢:

Sub Half_Table() 

    Dim lngTotal As Long 
    Dim lngHalf1 As Long 
    Dim lngHalf2 As Long 

    Dim strTable As String 
    Dim strIDfield As String 
    Dim strSQL1 As String 
    Dim strSQL2 As String 


    strTable = "table_Name" 
    strIDfield = "ID" 

    lngTotal = DCount("*", strTable) 
    lngHalf1 = Round(lngTotal/2) 
    lngHalf2 = lngTotal - lngHalf1 

    strSQL1 = "SELECT TOP " & lngHalf1 & " * FROM " & strTable & " ORDER BY " & strIDfield & " ASC" 
    strSQL2 = "SELECT TOP " & lngHalf2 & " * FROM " & strTable & " ORDER BY " & strIDfield & " DESC" 

    Debug.Print strSQL1 
    Debug.Print strSQL2 


End Sub 

變化strTablestrIDfield名稱相應。

這會生成以下2個查詢含1399條記錄的表:

SELECT TOP 700 * FROM table_Name ORDER BY ID ASC 
SELECT TOP 699 * FROM table_Name ORDER BY ID DESC 

我還沒展示瞭如何使用生成的SQL查詢 後來我想你知道,

+0

非常感謝托馬斯G – KEOC

0

考慮純

上半

:使用的行數數合計子查詢的SQL解決方案
SELECT [ID], [Category], [Product], [Price] 
FROM Products 
INNER JOIN 
    (SELECT [ID], 
      (SELECT Count(*) FROM Products t2 
      WHERE Products.[ID] <= t2.[ID]) AS ProductOrder, 
      (SELECT Count(*) FROM Products t2) AS ProductCount 
    FROM Products) AS sub 
ON Products.[ID] = sub.[ID] 
WHERE sub.ProductOrder >= sub.ProductCount/2 

下半部

SELECT [ID], [Category], [Product], [Price] 
FROM Products 
INNER JOIN 
    (SELECT [ID], 
      (SELECT Count(*) FROM Products t2 
      WHERE Products.[ID] <= t2.[ID]) AS ProductOrder, 
      (SELECT Count(*) FROM Products t2) AS ProductCount 
    FROM Products) AS sub 
ON Products.[ID] = sub.[ID] 
WHERE sub.ProductOrder <= sub.ProductCount/2