我想做什么:
如果表OITM
(OITM.AssetSerNo
)中序列号的出现总次数大于RDN1
中RDN1.SerialNum
的同一序列号的出现次数({{1 }}),然后我想从OITM
记录返回一些字段,其中包含资产编号OITM.ItemCode
(PKey)最大的匹配序列号。
我的代码如下
select
oitm.itemcode as 'Asset No',
oitm.itemname as 'Asset Description',
oitm.assetSerNo as 'Serial No'
from oitm
inner join rdn1 on oitm.assetserno = rdn1.serialnum
WHERE
OITM.itemtype = 'F'
and OITM.asststatus = 'A'
HAVING count(oitm.assetserno)>count(rdn1.serialnum)
不幸的是,我收到错误是因为我的大部分商品既不属于集合,也不属于集合功能。我甚至不确定HAVING
条款是解决问题的最佳方法(事实上,我相当确定它不是)。
编辑:示例数据(我猜?)
OITM
ItemCode ItemName AssetSerNo ItemType AsstStatus 123 Object 1 QW F I 234 Object 2 ER F A 345 Object 3 RT F I 456 Object 4 TY F A 567 Object 1 QW F I 678 Object 5 YU F I 789 Object 3 RT F A 890 Object 1 QW F A 901 Object 2 UI F A
这是项目主列表数据记录。 A =有效,I =无效。
RDN1
DocID Object Name Serial Num 1 Object 1 QW 2 Object 3 RT 3 Object 1 QW 4 Object 5 YU 5 Object 4 TY 6 Object 3 RT
这是退货记录的列表,用于租借物品何时返回仓库。
预期产出:
ItemCode ItemName AssetSerNo 789 Object 3 RT 456 Object 4 TY
我需要一个已创建退货的所有项目的列表,但该项目尚未处于非活动状态。我不能在RDN1上进行内部联接,因为我可能有返回的项目,项目记录更改为I,但随后将其发回并创建新的项目记录。
答案 0 :(得分:0)
20种不同的方法,他们没事。以下是使用大多数代码并实现EXISTS()命令的方法。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="10dp" >
<View android:id="@+id/mainActivity_view"
android:layout_width="100dp"
android:layout_height="100dp" />
<TextView
android:id="@+id/mainActivity_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="15dp" />
</LinearLayout>
答案 1 :(得分:0)
这是使用一些子查询的选项
SELECT
item.itemcode AS 'Asset No',
item.itemname AS 'Asset Description',
item.assetSerNo AS 'Serial No'
FROM
(
SELECT
oitm.itemcode,
oitm.itemname,
oitm.assetSerNo,
COUNT() OVER (PARTITION BY assetSerNo) assetSerNoCount,
ROW_NUMBER() OVER (PARTITION BY assetSerNo ORDER BY oitm.itemcode DESC) rn
FROM
oitm
WHERE
OITM.itemtype = 'F'
AND OITM.asststatus = 'A'
) item
LEFT JOIN (
SELECT
serialnum, COUNT(*) serialnumCount
FROM
rdn1
GROUP BY
serialnum
) serial ON serial.serialnum = item.assetSerNo
WHERE
ISNULL(serial.serialnumCount,0) < item.assetSerNoCount
AND item.rn = 1