我有一个表的“产品”有N个记录(超过5000个,并随时更改号码)拆表的记录。我如何根据表生成两个查询,一个用于上半部分记录,另一个用于另一半?访问 - 我怎样才能在两个查询
回答
使用(有没有遗漏的数字顺序编号,或至少一个字段),这可能工作的自动编号主键 - 虽然我还没有真正想通了,可能是几个陷阱?
返回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)
它确实可以工作,但很少有自动编号ID不会丢失。这是纯SQL中唯一可行的方法,但不可靠 –
同意,绝对不可靠。 –
@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
的问题是,你不能指定一个COUNT(*)
的结果子查询在TOP指令,所以不可能在纯SQL
可靠的方法是用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
变化strTable
和strIDfield
名称相应。
这会生成以下2个查询含1399条记录的表:
SELECT TOP 700 * FROM table_Name ORDER BY ID ASC
SELECT TOP 699 * FROM table_Name ORDER BY ID DESC
我还没展示了如何使用生成的SQL查询 后来我想你知道,
非常感谢托马斯G – KEOC
考虑纯
上半
:使用的行数数合计子查询的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
- 1. 我怎样才能插入查询与两个if(isset报表?
- 2. 我怎样才能让两个查询一次MongoDB中
- 3. 我怎样才能加入SQL查询两个表?
- 4. 我怎样才能访问用户?
- 5. 我怎样才能获得访问Android
- 6. 我怎样才能访问StackOverflow数据?
- 7. 我怎样才能访问dojox图表?
- 8. Symfony的1.4 - 我怎样才能查询
- 9. 我怎样才能在PHP
- 10. 我怎样才能在QT
- 11. 我怎样才能从两个查询从同一个表中创建两列
- 12. 我怎样才能在JSP
- 13. 我怎样才能在MATLAB
- 14. 我怎样才能访问共享成员在另一个类
- 15. 我怎样才能让一个后台页面访问我探
- 16. LINQ - 我怎样才能在一个查询
- 17. 我怎样才能在一个SELECT查询
- 18. 我怎样才能把这个自定义Linq查询查看?
- 19. 我怎样才能
- 20. 我怎样才能在MySQL查询连接两个不同的看法
- 21. 我怎样才能在Doctrine2
- 22. 我怎样才能把这个写成一个查询?
- 23. 我怎样才能让这个MySQL查询2个表
- 24. 我怎样才能加入这个2个MySQL查询一起
- 25. 我怎样才能在RSPEC
- 26. 我怎样才能
- 27. 我怎样才能
- 28. 我怎样才能
- 29. 我怎样才能在Ruby2.4
- 30. 我怎样才能在MySQL
您是否有标识记录ID(流水号从1到n,为n的记录数)表中的任意列? – FDavidov
如何区分上半年和下半年,记住记录顺序在数据库中没有意义? –
嗨!我有一个IDNumber,但我需要在查询中使用另一个标准。我认为在Count记录中将记录数除以2(生成一个N整数),在查询中选择第一个查询中记录的N个顶部,并创建第二个不匹配的查询。 表格的结构是: 1.Id-Autonumber 2.ProductName-Text 3.价格 – KEOC