【发布时间】:2014-04-09 04:39:01
【问题描述】:
过程是根据表A中的“字母”栏填写表B中的“城市”栏。
表A
+----------+-------+
| Number | Letter|
+----------+-------+
| 1 | A |
| 1 | |
| 1 | |
| 2 | |
| 2 | |
| 3 | |
| 3 | B |
| 3 | |
| 3 | C |
+----------+-------+
表 B
+----------+-------+
| AC | City |
+----------+-------+
| 1 | A |
| 1 | A |
| 1 | A |
| 1 | A |
| 2 | |
| 2 | |
| 2 | |
| 2 | |
| 3 | B |
| 3 | B |
| 3 | B |
+----------+-------+
如果 AC=1,则参考 Number=1,并从上到下循环遍历“字母”值以获得最高值。
对于Number=1,最高值是A,所以对于AC=1,将所有“City”列填写为A。
对于AC=2,Number=2,表A中没有数值,所以每个AC=2的“City”都填空。
对于AC=3,Number=3,最高值是B,所以每个AC=3的“城市”都填写为B。
您如何在标准 SQL 中对此进行编码?
我正在使用 Caspio 软件并将 SQL 插入到“City”列本身,但这不应该过多干扰代码。
这是我目前所拥有的:
SELECT Letter
FROM TableA
WHERE TableA.Number = TableB.AC
AND TableA.Number != ""
LIMIT 1
但它似乎不起作用,我认为有必要遍历表 A 以找到每个 AC=Number 的 City 值。
感谢您的帮助。
编辑:
我已经找到解决办法了:
SELECT TOP 1 Letter
FROM TableA
WHERE Letter !='' AND Number=AC
谢谢。
【问题讨论】:
-
您使用的是哪个 DBMS? (顺便说一句:您的示例 SQL 不是“标准 SQL”)
-
@a_horse_with_no_name Caspio Bridge 的后端建立在 Microsoft 的 .NET 框架和 Microsoft SQL Server 之上。
-
您使用的是哪个版本的 MSSQL?
标签: sql sql-server