我有以下sql表
oitems table
+---------+-----------+----------+
| orderid | catalogid | numitems |
+---------+-----------+----------+
| O737 | 353 | 1 |
| O738 | 364 | 4 |
| O739 | 353 | 3 |
| O740 | 364 | 6 |
| O741 | 882 | 2 |
| O742 | 224 | 5 |
| O743 | 224 | 2 |
+---------+-----------+----------+
Orders table
+-----------------+------------+------------+
| orderid | ocardtype | odate |
+-----------------+------------+------------+
| O737 | Paypal | | 'OK
| O738 | MasterCard | 01.02.2012 | 'OK
| O739 | MasterCard | 02.02.2012 | 'OK
| O740 | Visa | 03.02.2012 | 'OK
| O741 | Sofort | | 'OK
| O742 | | | 'ignore because ocardtype is empty
| O743 | MasterCard | | 'ignore because Mastercard no odate
+-----------------+------------+------------+
Run Code Online (Sandbox Code Playgroud)
重新声明的数据表称为 result
+-----------+----------+--------------+
| catalogid | numitems | ignoreditems |
+-----------+----------+--------------+
| 353 | 4 | 0 |
| 364 | 10 | 0 |
| 882 | 2 | 0 |
| 224 | 0 | 7 |
+-----------+----------+--------------+
Run Code Online (Sandbox Code Playgroud)
想法是对具有以下条件catalogid的oitems表中数据具有相同描述的产品的numitems列求和
ocardtype为空则忽略numitems并将其视为0总和,并将忽略的项与ignoreditems
列相加ocardtype由于某种顺序MasterCard或Visa和odate为空,则忽略numitems,并认为这是
0和总结的忽略项目到ignoreditems列ocardtype是Paypal或Sofort,那么只需在numitems
不检查日期的情况下进行总结,因为这些类型不需要odate基本上我想将结果数据表保存到临时数据表并将其加载到vb.net数据表
我很难搞清楚如何在SQL查询中执行此操作!我需要这个作为vb.net的sql命令,能够以编程方式使用vb.net datatables使用循环和很多使用linq检查是一个选项,但我只需要从服务器获取此
select catalogid, numitems, allitems - numitems ignoreditems
from (
select i.catalogid,
sum(case when (ocardtype in ('PayPal','Sofort') OR
ocardtype in ('mastercard','visa') and
odate is not null) AND NOT EXISTS (
select * from booked b
where b.ignoredoid = o.orderid
) then numitems
else 0 end) numitems,
sum(numitems) allitems
from orders o
join oitems i on i.orderid=o.orderid
group by i.catalogid
) X
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1665 次 |
| 最近记录: |