SQL select 列有时为空的语句
SQL select statement with column being null sometimes
我想知道我将如何创建一个 SQL select 语句,该语句可能在几个列中有一个可能的空值。下面是一个可能的结果集:
Volume | Ticket | Hours | Rate | Amount
1234 10.5 190 1995
90 90 100 9000
1235 11 190 2090
90 90 110 9900
音量与他们上面的票有关。所以第一次显示票时,我们不想显示数量,但我们想显示票号。如果有交易量,我们希望下一行显示它的值,而不是票证。
我拉取的tabletable是Charges
。这些是列:
ChargeID, TicketNum, ProductID, Hours, Rate, Amount
其中 ChargeID 是主键。
如果有人有任何想法,他们将不胜感激。
你可以这样做(虽然这是在 Oracle 中..)
不确定为什么要标记此问题 vba ..
with w_data as (
select 33 volume, 1234 ticket, 10.5 hours, 190 rate, 1995 amount from dual union all
select 90 volume, 1234 ticket, 90 hours, 100 rate, 9000 amount from dual union all
select 33 volume, 1235 ticket, 11 hours, 190 rate, 2090 amount from dual union all
select 90 volume, 1235 ticket, 90 hours, 110 rate, 9900 amount from dual
)
Select case when ticket = lag(ticket) over (partition by ticket order by ticket, volume) then volume else null end new_volume,
case when ticket = lag(ticket) over (partition by ticket order by ticket, volume) then null else ticket end new_ticket,
hours, rate, amount
from w_data
order by ticket, volume
/
NEW_VOLUME NEW_TICKET HOURS RATE AMOUNT
---------- ---------- ---------- ---------- ----------
1234 10.5 190 1995
90 90 100 9000
1235 11 190 2090
90 90 110 9900
4 rows selected.
我想知道我将如何创建一个 SQL select 语句,该语句可能在几个列中有一个可能的空值。下面是一个可能的结果集:
Volume | Ticket | Hours | Rate | Amount
1234 10.5 190 1995
90 90 100 9000
1235 11 190 2090
90 90 110 9900
音量与他们上面的票有关。所以第一次显示票时,我们不想显示数量,但我们想显示票号。如果有交易量,我们希望下一行显示它的值,而不是票证。
我拉取的tabletable是Charges
。这些是列:
ChargeID, TicketNum, ProductID, Hours, Rate, Amount
其中 ChargeID 是主键。
如果有人有任何想法,他们将不胜感激。
你可以这样做(虽然这是在 Oracle 中..) 不确定为什么要标记此问题 vba ..
with w_data as (
select 33 volume, 1234 ticket, 10.5 hours, 190 rate, 1995 amount from dual union all
select 90 volume, 1234 ticket, 90 hours, 100 rate, 9000 amount from dual union all
select 33 volume, 1235 ticket, 11 hours, 190 rate, 2090 amount from dual union all
select 90 volume, 1235 ticket, 90 hours, 110 rate, 9900 amount from dual
)
Select case when ticket = lag(ticket) over (partition by ticket order by ticket, volume) then volume else null end new_volume,
case when ticket = lag(ticket) over (partition by ticket order by ticket, volume) then null else ticket end new_ticket,
hours, rate, amount
from w_data
order by ticket, volume
/
NEW_VOLUME NEW_TICKET HOURS RATE AMOUNT
---------- ---------- ---------- ---------- ----------
1234 10.5 190 1995
90 90 100 9000
1235 11 190 2090
90 90 110 9900
4 rows selected.