SELECT每个ID仅一个值-SQL Server

时间:2019-09-25 19:12:43

标签: sql sql-server sorting querying

我完全不知道这是可能的,我什至不知道如何用谷歌搜索。

我正在使用SQL Server 2014。

现在我有一个SP,可以输出一个表,其中包含MovementID,Vehicle,VehicleType和Total的数据。 但是它将所有车辆ID和车辆类型总计在一起。

我需要分开车辆。 问题是总数看起来像是重复的或三次重复的。

所以,我如何每个ID仅选择一次该列(示例中为MoveID)。

我会继续尝试,但是任何想法都将不胜感激。

[Example (Much more clear by looking at it)

3 个答案:

答案 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