sql

Lbulang 2017-03-17 10:55:28





怎么得到容量=32,颜色=白色的 这个Invid。
...全文
283 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 Lbulang 的回复:
如果一个id 有很多条数据,有没其他方式?
那就用动态sql DECLARE @col VARCHAR(max),@sql NVARCHAR(max) SELECT @col=ISNULL(@col+',[','[')+CONVERT(VARCHAR,NAME)+']' FROM #T1 GROUP BY NAME PRINT @col SELECT @sql=' SELECT * FROM #t1 PIVOT(MAX(VALUE) FOR NAME IN ('+@col+')) AS P' PRINT @sql EXEC(@sql)
Lbulang 2017-03-17
  • 打赏
  • 举报
回复
引用 5 楼 baidu_36457652 的回复:

WITH T1(II,NAME,VALUE) AS(SELECT 123,'颜色','白色' union all 
SELECT 123,'容量','32' union all 
SELECT 124,'颜色','白色' union all
select 124,'容量','64')
--SELECT * FROM T1MAX
--PIVOT (MAX(VALUE)FOR II IN([123],[124]))MM
select * from t1
pivot (MAX(VALUE) FOR NAME IN([容量],[颜色]))MM
/ II 容量 颜色 123 32 白色 124 64 白色 /
如果一个id 有很多条数据,有没其他方式?
  • 打赏
  • 举报
回复

WITH T1(II,NAME,VALUE) AS(SELECT 123,'颜色','白色' union all 
SELECT 123,'容量','32' union all 
SELECT 124,'颜色','白色' union all
select 124,'容量','64')
--SELECT * FROM T1MAX
--PIVOT (MAX(VALUE)FOR II IN([123],[124]))MM
select * from t1
pivot (MAX(VALUE) FOR NAME IN([容量],[颜色]))MM
/ II 容量 颜色 123 32 白色 124 64 白色 /
Tiger_Zhao 2017-03-17
  • 打赏
  • 举报
回复
/* 测试数据
WITH table1(id,invid,name,value) AS (
SELECT 16,85,'颜色','白色' UNION ALL
SELECT 01,85,'容量','32' UNION ALL
SELECT 94,98,'颜色','白色' UNION ALL
SELECT 75,98,'容量','64'
)
*/
SELECT invid
FROM table1
WHERE (name='颜色' AND value='白色')
OR (name='容量' AND value='32')
GROUP BY invid
HAVING COUNT(DISTINCT name) = 2

      invid
-----------
85
Lbulang 2017-03-17
  • 打赏
  • 举报
回复
引用 1 楼 quwang86 的回复:
提供下表结构,上面查询的是一张表里面的结果还是是什么?
表结构就是这几个字段,里面就四行数据。
昵称被占用了 2017-03-17
  • 打赏
  • 举报
回复
select Invid
from tablename as a
where name = '颜色' and value = '白色'
and exists (
select 1
from tablename as b
where b.Invid = a.Invid and b.name = '容量' and b.value = '32'
)
quwang86 2017-03-17
  • 打赏
  • 举报
回复
提供下表结构,上面查询的是一张表里面的结果还是是什么?
Lbulang 2017-03-17
  • 打赏
  • 举报
回复
引用 11 楼 Tiger_Zhao 的回复:
[Quote=引用 9 楼 Lbulang 的回复:]HAVING COUNT(productId) = 2 如果是等于3呢?[/Quote] 看我#4,早就考虑到了,用 COUNT(DISTINCT name) 最多只有 2
恩恩,我现在把这个2 或者3 作为参数由外部传进来。至于是2 还是3 这个由其他地方控制。能得到invid就可以了。多谢各位!
Tiger_Zhao 2017-03-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Lbulang 的回复:]HAVING COUNT(productId) = 2 如果是等于3呢?[/Quote]
看我#4,早就考虑到了,用 COUNT(DISTINCT name) 最多只有 2
唐诗三百首 2017-03-17
  • 打赏
  • 举报
回复

select invid
 from [表名]
 where (name='容量' and value='32')
 or (name='颜色' and value='白色')
 group by invid
 having count(distinct name)=2
Lbulang 2017-03-17
  • 打赏
  • 举报
回复
引用 8 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T(Invid int,name nvarchar(31),value nvarchar(31))
Insert #T
select 1,'颜色','白色' union all
select 1,'容量','32' union all
select 2,'颜色','白色' union ALL
select 2,'颜色','64' 
Go
--测试数据结束
SELECT  Invid
FROM    #T
WHERE   ( name = '容量'
          AND value = '32'
        )
        OR ( name = '颜色'
             AND value = '白色'
           )
GROUP BY Invid
HAVING  COUNT(Invid) = 2
HAVING COUNT(productId) = 2 如果是等于3呢?
二月十六 版主 2017-03-17
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T(Invid int,name nvarchar(31),value nvarchar(31))
Insert #T
select 1,'颜色','白色' union all
select 1,'容量','32' union all
select 2,'颜色','白色' union ALL
select 2,'颜色','64'
Go
--测试数据结束
SELECT Invid
FROM #T
WHERE ( name = '容量'
AND value = '32'
)
OR ( name = '颜色'
AND value = '白色'
)
GROUP BY Invid
HAVING COUNT(Invid) = 2




34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧