希望获得有关如何实现以下内容的建议。我有两张桌子。一个叫做类别,另一个叫做Trxn。我试图找出每个类别中有多少交易。我知道我需要将我的Trxn表与Category表连接起来。但问题是,Category表中的CategoryId是6个字符,这个相同的ID在Trxn表中分为两列,分别为4和2字符列。
如何加入两个列并左键加入Category表。 ??可能吗。我的aspx应用程序必须显示每个类别中已完成的traxns数量。 我通过下面的SQLFiddle链接附加了一个示例数据库模式。
SELECT Category.ID, count(Trxn.Cat_ID) FROM Category
LEFT JOIN Trxn
on Category.ID = (Trxn.Cat_ID+Trxn.STV)
where Category.Status='A'
AND Trxn.Status='ok'
group by Category.ID
http://sqlfiddle.com/#!3/6feef/2/0
请建议。
答案 0 :(得分:1)
你在where子句中有左外连接表的一部分。你不能这样做,它会使它成为一个普通的连接。
这有效:
SELECT
Category.ID,
COUNT(Trxn.Cat_ID)
FROM
Category
LEFT JOIN
Trxn
ON Category.ID = (rtrim(Trxn.Cat_ID)+ltrim(Trxn.STV))
AND Trxn.Status='ok'
WHERE Category.Status='A'
GROUP BY Category.ID
答案 1 :(得分:0)
由于某种原因,当你连接值时,cat_id之后有一个空格。我能够通过跑步找到这个。我刚注意到数据类型是一个字符。
select cat_id + stv from trxn
我修剪了空格,查询正在运行。
SELECT Category.ID, count(Trxn.Cat_ID) FROM Category
LEFT JOIN Trxn
on Category.ID = (rtrim(Trxn.Cat_ID)+ltrim(Trxn.STV)) AND Trxn.Status='ok'
where Category.Status='A'
group by Category.ID
答案 2 :(得分:0)
我认为当您使用Trxn.Cat_ID + Trxn.STV时,您的联接中的问题存在空间,这就是为什么它无法连接到您的类别表,因为没有这样的值,这里是我对你的问题的解决方案我已经自己测试了..如果你锻炼自己使用别名,你也可以更好地加入桌子:)
SELECT A.ID,count(A.ID) FROM Category A
LEFT JOIN Trxn B ON REPLACE(B.Cat_ID+B.STV,' ','') = A.ID
WHERE A.Status = 'A'
AND B.Status = 'ok'
GROUP BY A.ID
答案 3 :(得分:0)
运行以下查询时,
SELECT Trxn.Cat_ID,Trxn.STV, Trxn.Cat_ID+Trxn.STV
FROM TRXN;
输出为
CAT_ID | STV | COLUMN_2
EBL01 | 06 | EBL01 06
EBL01 | 06 | EBL01 06
EBL02 | 06 | EBL02 06
EBL03 | 06 | EBL03 06
您将能够注意到COLUMN_2中必须删除的空间以进行比较。因此,尝试替换查询中的所有空格,它应该工作。也许你可以试试:
SELECT Category.ID, count(Trxn.Cat_ID) TRANSACTION_COUNT FROM Category
LEFT JOIN Trxn
on Category.ID = REPLACE(Trxn.Cat_ID+Trxn.STV,' ','')
where Category.Status='A'
AND Trxn.Status='ok'
group by Category.ID;
查询在小提琴中提供以下输出:
ID | TRANSACTION_COUNT
EBL0106 | 2