我正在使用查询,我想按1个特定列对它们进行分组。我得到了GROUP BY子句中没有列出的其他字段的错误,是的我知道我应该告诉Sql Server一行按行分组,你应该选择,但我不知道该怎么做。如果我使用MIN()函数并且如果它是文本字段我不知道该怎么做。 我想选择所有数据,如果复制videos.number,videos.title而不是获取第一行分组行。此查询的作用是:根据客户端订阅从包中获取所有通道。有时不同的套餐有相同的渠道,我不希望这个渠道向客户展示两次。
USE [DB]
SELECT Videos.number,
Videos.title,
Videos.description,
Videos.format,
Videos.urlTwo AS url,
Videos.icon,
Videos.streamtype,
'pin' AS password,
Videos.categoryid,
Videos.videotype,
FROM subscription
INNER JOIN packages_channels
ON subscription.pkgid = packages_channels.package_id
INNER JOIN Videos
ON packages_channels.video_id = Videos.number
WHERE (GETDATE() >= subscription.startdate)
AND (GETDATE() <= subscription.enddate)
AND (subscription.username = 'mon1')
GROUP BY videos.number, Videos.title
ORDER BY Videos.number asc
这就是它现在所显示的:
number title description format url icon
101 channel1 101 101 URLstream1 iconPath1
101 channel1 101 101 URLstream1 iconPath1
102 channel2 101 102 URLstream2 iconPath2
107 channel7 107 107 URLstream7 iconPath7
108 channel8 108 108 URLstream8 iconPath8
但我想得到的结果是:
number title description format url icon
101 channel1 101 101 URLstream1 iconPath1
102 channel2 101 102 URLstream2 iconPath2
107 channel7 107 107 URLstream7 iconPath7
108 channel8 108 108 URLstream8 iconPath8
因为你看到channel1只有一次 网址和图标是问题所在。这个字段是文本
出于安全原因,我无法显示真实的sql结果。
答案 0 :(得分:1)
我不认为你真的需要一个小组,因为你没有使用任何聚合功能。
使用distinct
有望完成下面的工作
SELECT DISTINCT
Videos.number,
Videos.title,
Videos.description,
Videos.format,
convert(varchar(max),Videos.urlTwo) AS url,
convert(varchar(max),Videos.icon) as icon,
Videos.streamtype,
'pin' AS password,
Videos.categoryid,
Videos.videotype
FROM subscription
INNER JOIN packages_channels
ON subscription.pkgid = packages_channels.package_id
INNER JOIN Videos
ON packages_channels.video_id = Videos.number
WHERE (GETDATE() >= subscription.startdate)
AND (GETDATE() <= subscription.enddate)
AND (subscription.username = 'mon1')
ORDER BY Videos.number asc
答案 1 :(得分:0)
如果描述和格式等其他列在功能上依赖于您要分组的列,则只需将它们包含在group by子句中即可。
功能依赖性意味着该列对于其功能依赖的列的特定值始终具有相同的值。
如果它们不依赖于功能,那么这根本不起作用,因为如果对一个数字有不同的描述,SQL Server如何确定要显示哪个描述?
解决此问题的一种方法是使用MAX(描述)。这使得按字母顺序排列的描述可以任意选择。
答案 2 :(得分:0)
您也可以对文本列使用MIN()或MAX()。
你有很多解决方案。请检查此帖子Retrieving the last record in each group