Sql server SQL Server 2012,如果存在其他行,则仅显示一行
问题: 当我运行查询时,我得到以下结果(列Sql server SQL Server 2012,如果存在其他行,则仅显示一行,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,问题: 当我运行查询时,我得到以下结果(列任务\u externalId): TC229090-10000-3 TC229090-20000-3 TC229830-10000-3 TC229685-10000-3 一个任务(TC229090)可以包含多行(10000、20000),但也可以只有一行(仅10000行) 我的完整代码: SELECT v.voorgemeld_handmatig, v.voorgemeld, v.mac, v.orn, v.cdm, v.blo,
任务\u externalId
):
- TC229090-10000-3
- TC229090-20000-3
- TC229830-10000-3
- TC229685-10000-3
TC229090
)可以包含多行(10000、20000),但也可以只有一行(仅10000行)
我的完整代码:
SELECT
v.voorgemeld_handmatig, v.voorgemeld, v.mac, v.orn, v.cdm, v.blo,
v.bco, v.tarcode, (v.timeslotfrom + ' - ' + v.timeslottill),
cast (case
when
(Select ac2.actionSpecificationName
From [COMTECdefault].[dbo].[task] t2
Join [COMTECdefault].[dbo].[actionKind] ak2 On t2.id_actionKind = ak2.id_actionKind
Join [COMTECdefault].[dbo].[actionSpecification] ac2 On ak2.id_actionSpecification = ac2.id_actionSpecification
where t2.task_externalId = (left(t.task_externalId, 15) + '2')) = 'laden'
then 'Vol'
else 'Leeg'
end as text) as IMPORT,
t.task_externalId, a.addressName, a.cityName,
CONVERT(DATE, t.from_date) as [Date],
CONVERT(varchar(8), CONVERT(TIME, t.from_date)) as [Tijd],
res.resourceName, resk.resourceKindName, r.shipOwner,
t.reference,
(Select resourceName
From [COMTECdefault].[dbo].[resource] r5
Left Outer Join [COMTECdefault].[dbo].resourceKind rk5 On rk5.id_resourceKind = r5.id_resourceKind
Where (id_resource = SUBSTRING(pt.StartResources, 0, CHARINDEX(',', pt.StartResources))
or id_resource = PARSENAME(REPLACE(SUBSTRING(pt.StartResources, CHARINDEX(',', pt.StartResources) + 1, LEN(pt.StartResources)), ',', '.'), 4)
or id_resource = PARSENAME(REPLACE(SUBSTRING(pt.StartResources, CHARINDEX(',', pt.StartResources) + 1, LEN(pt.StartResources)), ',', '.'), 3)
or id_resource = PARSENAME(REPLACE(SUBSTRING(pt.StartResources, CHARINDEX(',', pt.StartResources) + 1, LEN(pt.StartResources)), ',', '.'), 2)
or id_resource = PARSENAME(REPLACE(SUBSTRING(pt.StartResources, CHARINDEX(',', pt.StartResources) + 1, LEN(pt.StartResources)), ',', '.'), 1))
and r5.id_resourceKind = 51),
udo.udf_Gewicht, udo.udf_Zegelnummer,
cast (case when a.addressName = 'APM Terminal 2'
then case when udo.udf_Zegelnummer IS NULL
then 0
else 1
end
when a.addressName IN ('ect delta', 'Euromax Terminam C.V.', 'Euromax Terminal')
then case when udo.udf_Gewicht = 0
then 0
else 1
end
else 1
end as bit) as [voormelden],
v.foutcode, v.foutcode_tekst, v.V_door
FROM
[COMTECdefault].[dbo].[task] t
JOIN
[COMTECdefault].[dbo].[actionKind] ak ON t.id_actionKind = ak.id_actionKind
JOIN
[COMTECdefault].[dbo].[actionSpecification] ac ON ak.id_actionSpecification = ac.id_actionSpecification
LEFT OUTER JOIN
[COMTECdefault].[dbo].[resourceOrder] ro ON t.id_order = ro.id_order
LEFT OUTER JOIN
[COMTECdefault].[dbo].[resource] res ON ro.id_resource = res.id_resource
LEFT OUTER JOIN
[COMTECdefault].[dbo].[resourceKind] resk ON res.id_resourceKind= resk.id_resourceKind
LEFT OUTER JOIN
[COMTECdefault].[dbo].[address] a ON t.id_address = a.id_address
LEFT OUTER JOIN
[COMTECdefault].[dbo].[resourceOrder] r ON t.id_order = r.id_order
LEFT OUTER JOIN
[COMTECdefault].[dbo].[order] o ON o.id_order = r.id_order
LEFT OUTER JOIN
[COMTECdefault].[dbo].[voormelden] v ON v.id_task_otd = t.task_externalId
LEFT OUTER JOIN
[COMTECdefault].[dbo].[ud_order] udo ON udo.id_order = t.id_order
LEFT OUTER JOIN
[COMTECdefault].[dbo].[plannedTask] pt on t.id_task = pt.id_task
WHERE
(pt.id_Task IS NULL OR pt.taskstate <> 'finished')
AND (v.canceled IS NULL OR v.canceled = 0)
AND left(res.resourceName, 4) <> 'XXXU'
AND t.canceled = 0
AND (t.from_date <= '2016-11-24 23:59:59')
AND (ac.actionSpecificationName = 'inleveren')
AND a.addressName IN ('APM Terminal 1','APM Terminal 2', 'ect delta', 'rwg', 'Euromax Terminam C.V.', 'Euromax Terminal')
ORDER BY
res.resourceName, a.addressName, t.task_externalId
选择
v、 voorgemeld_Handtig,v.voorgemeld,v.mac,v.orn,v.cdm,v.blo,
v、 bco,v.tarcode,(v.timeslotfrom+'-'+v.timeslottill),
铸造(外壳)
什么时候
(选择ac2.actionSpecificationName
来自[COMTECdefault].[dbo].[task]t2
在t2.id\u actionKind=ak2.id\u actionKind上加入[COMTECdefault].[dbo].[actionKind]ak2
在ak2.id\u actionSpecification=ac2.id\u actionSpecification上加入[COMTECdefault].[dbo].[actionSpecification]ac2
其中t2.task_externalId=(左(t.task_externalId,15)+“2”)=“ladden”
然后是“Vol”
还有“韭菜”
以文本结尾)作为导入,
t、 task_externalId,a.addressName,a.cityName,
将(日期,t.from_DATE)转换为[日期],
将(varchar(8),CONVERT(TIME,t.from_date))转换为[Tijd],
res.resourceName,resk.resourceKindName,r.shipOwner,
t、 参考,
(选择resourceName
来自[COMTECdefault].[dbo].[resource]r5
左外部联接[COMTECdefault].[dbo].rk5.id\u resourceKind=r5.id\u resourceKind上的resourceKind rk5
其中(id_resource=SUBSTRING(pt.StartResources,0,CHARINDEX(',',pt.StartResources))
或id_resource=PARSENAME(替换(子字符串(pt.StartResources,CHARINDEX(',',pt.StartResources)+1,LEN(pt.StartResources)),',',','),4)
或id_resource=PARSENAME(替换(子字符串(pt.StartResources,CHARINDEX(',',pt.StartResources)+1,LEN(pt.StartResources)),',',','),3)
或id_resource=PARSENAME(替换(子字符串(pt.StartResources,CHARINDEX(',',pt.StartResources)+1,LEN(pt.StartResources)),',',','),2)
或者id_resource=PARSENAME(替换(子字符串(pt.StartResources,CHARINDEX(',',pt.StartResources)+1,LEN(pt.StartResources)),',',','),1))
r5.id_resourceKind=51),
udo.udf_Gewicht,udo.udf_Zegelnumer,
强制转换(a.addressName='APM Terminal 2'时的情况)
然后,当udo.udfu zegelnumer为NULL时出现这种情况
然后0
其他1
结束
当a.addressName位于('ect delta'、'Euromax Terminam C.V.、'Euromax Terminal'中时)
然后,当udo.udfu Gewicht=0时出现这种情况
然后0
其他1
结束
其他1
结束为位)为[voormelden],
v、 foutcode,v.foutcode_tekst,v.v_门
从…起
[COMTECdefault].[dbo].[task]t
参加
[COMTECdefault].[dbo].[actionKind]ak ON t.id\u actionKind=ak.id\u actionKind
参加
[COMTECdefault].[dbo].[actionSpecification]ac ON ak.id\u actionSpecification=ac.id\u actionSpecification
左外连接
[COMTECdefault].[dbo].[resourceOrder]ro ON t.id_order=ro.id_order
左外连接
[COMTECdefault].[dbo].[resource]res ON ro.id\u resource=res.id\u resource
左外连接
[COMTECdefault].[dbo].[resourceKind]resk ON res.id\u resourceKind=resk.id\u resourceKind
左外连接
[COMTECdefault].[dbo].[address]a在t.id\U地址=a.id\U地址上
左外连接
[COMTECdefault].[dbo].[resourceOrder]r在t.id\u顺序=r.id\u顺序上
左外连接
[COMTECdefault].[dbo].[order]o上的o.id\U order=r.id\U order
左外连接
v.id\u task\u otd=t.task\u externalId上的[COMTECdefault].[dbo].[voormelden]v
左外连接
[COMTECdefault].[dbo].[ud\U order]udo上的udo.id\U order=t.id\U order
左外连接
[COMTECdefault].[dbo].[plannedTask]pt on t.id_task=pt.id_task
哪里
(pt.id_任务为空或pt.taskstate“finished”)
和(v.cancelled为NULL或v.cancelled=0)
左(res.resourceName,4)“XXXU”
t=0
(t.from_date我不打算涉及所有的文本,很可能会缩小所有的连接等,但下面是使用task_externalid
列执行所需操作的模式
DECLARE @Table AS TABLE (task_externalid VARCHAR(100))
INSERT INTO @Table VALUES
('TC229090-10000-3')
,('TC229090-20000-3')
,('TC229830-10000-3')
,('TC229685-10000-3')
;WITH cte AS (
SELECT
*
,RowNumber = ROW_NUMBER() OVER (PARTITION BY
LEFT(task_externalid,CHARINDEX('-',task_externalid) - 1)
ORDER BY task_externalid DESC)
FROM
@Table
)
SELECT *
FROM
cte
WHERE
RowNumber = 1
- 在
任务外部ID的大部分左侧创建一个分区的行编号
- 通过
task\u externalid DESC
这三个字段是分开的还是一个长字符串?这是一个长字符串。ntext
、text
和image
数据类型将在SQL Server的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。使用nvarchar(max)
,varchar(max)
,和varbinary(max)
取而代之。-.您应该消除强制转换(..…作为文本)
。。。