以下是我的现状:
我收到了一长串数据,其中包含名称和值,以及相应的值ID。ID的数量对于呈现的数据可能会有所不同,但对于整个集合来说是恒定的。(这个集合每个名称正好有2个值)。问题是,名称重复,但ID不重复。然后我的问题变成了,
如何转换如下所示的表:
Name | ID | Value
Sam | 1 | 15
Sam | 2 | 6
Bob | 1 | 9
Bob | 2 | 11
更像这样:
Name | Value1 | Value2
Sam | 15 | 6
Bob | 9 | 11
注意:我很难想出这个问题的标题。
您需要的是一个PIVOT查询。根据您的数据集中有多少个名称,以及您是否提前知道这些名称,您可能需要一个“动态透视”。
数据透视查询可能有点令人困惑。但是这里有两个如何构建动态数据透视查询的示例。(第二个是另一个Stack Overflow问题,可能比第一个更适合您的情况。)
T-SQL:多列上的动态透视
T-SQL 动态透视
编辑:具体示例...
-- DROP TABLE #MyTable
-- CREATE TABLE #MyTable( name varchar(10), ID int, value int );
INSERT #MyTable VALUES ('Sam', 1, 15);
INSERT #MyTable VALUES ('Sam', 2, 6);
INSERT #MyTable VALUES ('Bob', 1, 9);
INSERT #MyTable VALUES ('Bob', 2, 11);
-- INSERT #MyTable VALUES ('Sam', 3, 1);
-- INSERT #MyTable VALUES ('Bob', 3, 2);
DECLARE @cols NVARCHAR(2000)
DECLARE @query NVARCHAR(4000)
SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
'],[' + CONVERT(varchar(5), t.ID )
FROM #MyTable AS t
--ORDER BY '],[' + t.ID
FOR XML PATH('')
), 1, 2, '') + ']'
--SELECT @cols
SET @query = N'SELECT name,'+ @cols +' FROM
(SELECT t1.name, t1.ID, t1.Value FROM #MyTable AS t1) p
PIVOT (MAX([Value]) FOR ID IN ( '+ @cols +' ))
AS pvt;'
EXECUTE(@query)
如果您可以确定该集合只有两个值,并且这些值的ID
始终为1或2,则可以执行以下操作:
CREATE TABLE #Table (Name VARCHAR(5), ID INT, Value INT)
INSERT INTO #Table VALUES ('Sam', 1, 15), ('Sam', 2, 6), ('Bob', 1, 9), ('Bob', 2, 11)
SELECT t.Name,
t.Value AS Value1,
t2.Value AS Value2
FROM #Table t
INNER JOIN #Table t2 ON t2.Name = t.Name AND t2.ID = 2
WHERE t.ID = 1
DROP TABLE #Table
请注意,临时表只是为了说明结果。重要的是 SELECT
语句。
这将表连接到自身以获取Value2的值。
您可以使用pivot作为示例。看看这个代码片段:
SELECT pvt.Name, pvt.[1] as Value1, pvt.[2] as Value2
FROM yourTable
PIVTO (
MAX(Value)
FOR id IN([1],[2])
) as pvt
你只需要将你的附加ID添加到IN()
和SELECT
中。
如果你需要一个动态支点,你可以在这里使用这个:
DECLARE @sql nvarchar(max), @columnlist nvarchar(max)
SELECT @columnlist =
COALESCE(@columnlist + N',['+CONVERT(nvarchar(max),cols.id)+']',
N'['+CONVERT(nvarchar(max),cols.id)+']'
)
FROM (SELECT DISTINCT id FROM yourTable) as cols
-- this is your part
SET @sql = N'
SELECT pvt.*
FROM yourTable
PIVTO (
MAX(Value)
FOR id IN('+@columnlist+')
) as pvt'
EXEC(@sql)
当您将一个项目添加到一个ObservableList中(该列表显示在TableView中)时,如何在添加重复项目时更新行? 例如,考虑一个包含三个列的TableView:项目、数量和价格。这可以通过以下代码来实现: 在其当前形式中,您可以得到如下表: 项目 --------- 数量 ----- 价格。 炒面----- 1 ----------- 4.20。 泰国-------- 1 -------
我正在网上搜索住房数据,并将其放入熊猫数据目录中。我想先测试一个清单的函数,然后再继续几个清单。我唯一的问题是条目添加到DataFrame的方式。 列表信息是作为列而不是行添加的(我希望它作为行添加)。这是我正在做的。有没有更好的功能可以使用?提前感谢! 附注:位置、价格、床位等都是价值。(例如,位置可以是,价格可以是,等等)
我想添加一个图像到我的页面,所以当我分享链接时,它会显示图像和描述,就像它在下面的图片中一样,或者类似的东西,所以它不仅只显示链接描述,还会显示图像。
我有一个来自excel电子表格的数据框,其中我找到了每个域出现的频率。我想添加域频率计数到它的相应域。 下面是查找频率并尝试将其添加到相应域的代码。 当我从数据帧打印出频率时:
我将Tomcat从版本7.0.47升级到版本8.0.0-RC5(x86),它很好(我做了测试)。 当我在NetBeans 7.4上进行新的配置以处理Tomcat 8.0.0-RC5时,它显示:指定的LocationServer文件夹(CatalinaHome)无效。 我读了一些关于降低Tomcat等级的帖子,但我想在它之前执行一些任务。也许设置一些文件...你能帮帮我吗? 马科斯
我刚开始使用LDAP和Windows Server 2012。我已经设法让我的PHP代码使用管理员帐户绑定到Active Directory,但我似乎可以使用ldap_add函数创建一个新用户。 我正在运行Windows Server 2012 R2和IIS 8。我已经安装了带有企业根证书的证书颁发机构,并且能够使用ldp.exe与SSL连接连接到AD。 我已经浏览了谷歌以及“可能重复的线程”,但