我完全不知道这是可能的,我什至不知道如何用谷歌搜索。
我正在使用SQL Server 2014。
现在我有一个SP,可以输出一个表,其中包含MovementID,Vehicle,VehicleType和Total的数据。 但是它将所有车辆ID和车辆类型总计在一起。
我需要分开车辆。 问题是总数看起来像是重复的或三次重复的。
所以,我如何每个ID仅选择一次该列(示例中为MoveID)。
我会继续尝试,但是任何想法都将不胜感激。
[
答案 0 :(得分:0)
您可以按MovementID对记录进行分区,然后为分区中的每一行生成一个ROW_NUMBER。然后,您可以使用IIF仅在行号为1时显示总计,即该行是分区中的第一行。它应该看起来像这样:
SELECT MovementID, VehicleID, VehicleType, IIF(rowno = 1, Total, NULL)
FROM
(
SELECT MovementID, VehicleID, VehicleType, Total,
ROW_NUMBER() OVER (PARTITION BY MovementID ORDER BY MovementID) AS rowno
FROM <WHAT_I_HAVE_NOW>
) tmp
答案 1 :(得分:0)
您可以使用LAG
查看上一行的值。
with q as (your query here)
select
movementid, vehicleid, vecicletype,
case when movementid = lag(movementid) over (order by movementid, vehicleid)
then null else total
end as total
from q
order by movementid, vehicleid;
答案 2 :(得分:0)
您可以按以下方式拆分和加入:
<meta-data
android:name="OnlineSearch.Key"
android:value="your-tomtom-key" />
答案如下:
+------------+------------+-------------+-------+ | movementid | vehichleid | vehicletype | total | +------------+------------+-------------+-------+ | 1 | V01 | F | 200 | | 1 | V02 | T | NULL | | 2 | V04 | V | 140 | | 3 | V03 | F | 300 | | 3 | V02 | F | NULL | +------------+------------+-------------+-------+
我使用了一个可以创建如下的函数:
;with cte_vids as (
select * from #tblmove
cross apply udf_split( vehicleids, ',')
), cte_vtypes as (
select * from #tblmove
cross apply udf_split( vehicletypes, ',')
)
select cid.movementid, cid.[value] as vehichleid, cty.[value] as vehicletype,
case when cid.rown = 1 then cid.total else null end as total
from cte_vids cid join cte_vtypes cty
on cid.movementid = cty.movementid and cid.vehicleids = cty.vehicleids and cid.rown = cty.rown