【问题标题】:Fetch data from tables in SQL and create columns on the front from several tables. How can I join SQL query?从 SQL 中的表中获取数据并从多个表中创建列在前面。如何加入 SQL 查询?
【发布时间】:2021-07-06 15:06:45
【问题描述】:

我正在编写我的 SQL 查询,但我无法将它们全部组合起来。我总是得到一个带有查询的列。 PM_Product 表的所有公用表。如何进行合并操作?

我的 SQL 查询:

 SELECT pv.PropertyValue as [Author]
 FROM FAZIKI.dbo.PM_Product as p
 JOIN FAZIKI.dbo.PM_ProductProperty as pp on p.Id=pp.ProductId
 JOIN FAZIKI.dbo.PM_PropertyValue as pv on pp.ValueId=pv.Id
 WHERE p.RayonId=1 AND pv.PropertyId=69 OR pv.PropertyId=67 OR pv.PropertyId=38

 SELECT pv.PropertyValue as [Publisher]
 FROM FAZIKI.dbo.PM_Product as p
 JOIN FAZIKI.dbo.PM_ProductProperty as pp on p.Id=pp.ProductId
 JOIN FAZIKI.dbo.PM_PropertyValue as pv on pp.ValueId=pv.Id
 WHERE p.RayonId=1 AND pv.PropertyId=9 OR pv.PropertyId=13 OR pv.PropertyId=60 OR pv.PropertyId=73

 SELECT pv.PropertyValue as [Number of Pages]
 FROM FAZIKI.dbo.PM_Product as p
 JOIN FAZIKI.dbo.PM_ProductProperty as pp on p.Id=pp.ProductId
 JOIN FAZIKI.dbo.PM_PropertyValue as pv on pp.ValueId=pv.Id
 WHERE p.RayonId=1 AND pv.PropertyId=61 OR pv.PropertyId=31

SELECT dpt.RegionName as [BDR]
FROM FAZIKI.dbo.PM_Product as p
JOIN FAZIKI.dbo.PM_ProductRegion ppr on p.Id=ppr.ProductId
LEFT JOIN FAZIKI.dbo.DF_PMRegionCupboardShelfType tt ON tt.Id = ppr.RegionCupboardShelfTypeId
LEFT JOIN FAZIKI.dbo.DF_PMRegionType dpt ON tt.RegionTypeId = dpt.Id
join FAZIKI.dbo.DF_Warehouse w on w.Id=dpt.WarehouseId
WHERE w.Id=45

SELECT gc.CategoryName as [Category Name]
FROM FAZIKI.dbo.PM_Product as p
JOIN FAZIKI.dbo.PM_ProductCategory as pc on p.Id=pc.ProductId
JOIN FAZIKI.dbo.GN_Category as gc on pc.CategoryId=gc.Id
WHERE p.RayonId=1

SELECT p.SalesPrice as [Sales price], cc.CurrencyCodeName as [Currency]
FROM FAZIKI.dbo.PM_Product as p
JOIN FAZIKI.dbo.DF_GNCurrencyCode cc on p.SalesCurrencyCodeId=cc.Id
WHERE p.RayonId=1

这些是连接 SQL 查询,它们共同使用的表是 PM_Product。如何组合所有这些查询?

【问题讨论】:

  • 您不能在括号内使用 SELECT * 然后分配给一个字段。您必须编写一个输出是字段的查询,并且不能将 * 输出放在字段中。输出必须是单个记录。 (SELECT top(1) Number FROM FAZIKI.dbo.PM_ProductProperty as pp JOIN FAZIKI.dbo.PM_PropertyValue AS pv on pp.ValueId=pv.Id WHERE p.Id=pp.ProductId AND pv.PropertyId=61 OR pv.PropertyId= 31) 作为[页数]
  • 我现在改了查询,你能再看一下吗?每个查询都返回一列,我需要将它们全部写在一个查询中。你能帮我吗? @گلی
  • 如果可能,将您想要的输出示例以照片或 Excel 文件的形式放在这里,以便我可以相应地设置您的查询。
  • smallpdf.com/file#s=a436769f-abf1-4fd8-8643-bdb485f2da99我已经把xml文件上传到这里了@گلی先生
  • 注意ANDOR之前,所以a OR b AND ca OR (b AND c)相同,但a AND b OR c(a AND b) OR c相同

标签: sql sql-server tsql


【解决方案1】:

我根据 Excel 文件设置查询并发送给您。请检查,如果您有任何问题,我随时为您服务。

SELECT TOP(1) p.SalesPrice as [Sales price], cc.CurrencyCodeName as [Currency]
, (SELECT TOP(1) pv.PropertyValue 
 FROM FAZIKI.dbo.PM_Product as p
 JOIN FAZIKI.dbo.PM_ProductProperty as pp on p.Id=pp.ProductId
 JOIN FAZIKI.dbo.PM_PropertyValue as pv on pp.ValueId=pv.Id
 WHERE p.RayonId=1 AND pv.PropertyId=69 OR pv.PropertyId=67 OR pv.PropertyId=38) AS [Author]
, ( SELECT TOP(1) pv.PropertyValue 
 FROM FAZIKI.dbo.PM_Product as p
 JOIN FAZIKI.dbo.PM_ProductProperty as pp on p.Id=pp.ProductId
 JOIN FAZIKI.dbo.PM_PropertyValue as pv on pp.ValueId=pv.Id
 WHERE p.RayonId=1 AND pv.PropertyId=9 OR pv.PropertyId=13 OR pv.PropertyId=60 OR pv.PropertyId=73) as [Publisher]
,  (SELECT TOP(1) pv.PropertyValue 
 FROM FAZIKI.dbo.PM_Product as p
 JOIN FAZIKI.dbo.PM_ProductProperty as pp on p.Id=pp.ProductId
 JOIN FAZIKI.dbo.PM_PropertyValue as pv on pp.ValueId=pv.Id
 WHERE p.RayonId=1 AND pv.PropertyId=61 OR pv.PropertyId=31) as [Number of Pages]
, (SELECT TOP(1) dpt.RegionName 
FROM FAZIKI.dbo.PM_Product as p
JOIN FAZIKI.dbo.PM_ProductRegion ppr on p.Id=ppr.ProductId
LEFT JOIN FAZIKI.dbo.DF_PMRegionCupboardShelfType tt ON tt.Id = ppr.RegionCupboardShelfTypeId
LEFT JOIN FAZIKI.dbo.DF_PMRegionType dpt ON tt.RegionTypeId = dpt.Id
join FAZIKI.dbo.DF_Warehouse w on w.Id=dpt.WarehouseId WHERE w.Id=45) AS [BDR]
, (SELECT TOP(1) gc.CategoryName 
FROM FAZIKI.dbo.PM_Product as p
JOIN FAZIKI.dbo.PM_ProductCategory as pc on p.Id=pc.ProductId
JOIN FAZIKI.dbo.GN_Category as gc on pc.CategoryId=gc.Id
WHERE p.RayonId=1) as [Category Name]
FROM FAZIKI.dbo.PM_Product as p
JOIN FAZIKI.dbo.DF_GNCurrencyCode cc on p.SalesCurrencyCodeId=cc.Id
WHERE p.RayonId=1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-29
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    相关资源
    最近更新 更多