Sql server 如何合并SQL Server存储过程中的列表
这将显示以下数据:Sql server 如何合并SQL Server存储过程中的列表,sql-server,join,stored-procedures,union,Sql Server,Join,Stored Procedures,Union,这将显示以下数据: ALTER PROCEDURE [dbo].[spGetItemCategories] AS BEGIN SET NOCOUNT ON; --SELECT * FROM ItemCategories SELECT IC.Id, IC.Name ,C.Id AS CompanyId, C.Name AS CompanName FROM ItemCategories IC JOIN C
ALTER PROCEDURE [dbo].[spGetItemCategories]
AS
BEGIN
SET NOCOUNT ON;
--SELECT * FROM ItemCategories
SELECT
IC.Id, IC.Name ,C.Id AS CompanyId, C.Name AS CompanName
FROM
ItemCategories IC
JOIN
CompanyItems CI ON IC.Id = CI.ItemCategoryId
JOIN
Companies C ON CI.CompanyId = C.Id
--WHERE CI.CompanyId IN (SELECT TOP(100)* FROM Companies C)
END
但我想这样:
4 sdfs 14 Nestle
4 sdfs 15 Unilever
您可以检查此方法,但数据相同
4 sdfs 14 Nestle
15 Unilever
或CTE
declare @mytable table (compid int,compname varchar(20),itemid int, itemdesc varchar(20))
insert into @mytable
values
(1,'Company A',100,'Nestle'),
(1,'Company A',200,'UniLever'),
(2,'Company B',300,'Citrix'),
(2,'Company B',400,'SQL'),
(2,'Company B',500,'Oracle'),
(1,'Company B',600,'Microsoft')
select
iif(left(m1.ord_id,1)>1,NULL,m.compid) [CompID],
iif(left(m1.ord_id,1)>1,NULL,m.compname) [CompName],
m.itemid,
m.itemdesc
from @mytable m
inner join (
select distinct compid,row_number() over (partition by compid order by itemid) [ord_id], itemid
from @mytable) m1
on m.compid = m1.compid and m.itemid = m1.itemid
如果不满意空值,请替换字段
;with cte as
(
select distinct compid,row_number() over (partition by compid order by itemid) [ord_id], itemid
from @mytable
)
select
iif(left(m1.ord_id,1)>1,NULL,m.compid) [CompID],
iif(left(m1.ord_id,1)>1,NULL,m.compname) [CompName],
m.itemid,
m.itemdesc
from @mytable m
inner join cte m1
on m.compid = m1.compid and m.itemid = m1.itemid
结果
iif(left(m1.ord_id,1)>1,'',cast(m.compid as varchar)) [CompID],
iif(left(m1.ord_id,1)>1,'',m.compname) [CompName],
或者,在EntityFramework中,您将数据与显示渲染混淆。您在SSMS的“结果”选项卡中看到的呈现不是最终用户应该看到的(除非您计划将应用程序建模为SSMS)。。。强迫数据库执行通常为应用程序保留的工作,只会在你进入应用程序时引起悲伤。你只是为了演示而经历了很多步骤。从数据库的角度来看,OP的SQL是正确的。我想说,他们需要认识到表示和数据之间的区别。NULL不是我的解决方案。你不同意吗?你为什么不在@smoore4创建你的解决方案,让我来判断。这是怎么回事?NULL只是SQL的结果,您可以随时重新格式化它。。。这只是一个有解决方案的概念。我知道你想要分数。我们都有。这并不意味着每个问题都是合理的,值得回答,即使是可能的。正确的数据库方法是基于集合的。格式化数据是表示层的一部分。我知道你知道。您是否编写过要求查询输出(而不是表示)如下所示的查询?不是我,我应该说。。欢迎来到SQL@smoore4的世界。。凡事都有第一
CompID CompName itemid itemdesc
1 Company A 100 Nestle
200 UniLever
600 Microsoft
2 Company B 300 Citrix
400 SQL
500 Oracle