Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我正在尝试将两个表(主表和子表)合并为一个表。我只需要存储过程中子表的一条记录_Sql_Sql Server_Sql Server 2008_Stored Procedures - Fatal编程技术网

Sql 我正在尝试将两个表(主表和子表)合并为一个表。我只需要存储过程中子表的一条记录

Sql 我正在尝试将两个表(主表和子表)合并为一个表。我只需要存储过程中子表的一条记录,sql,sql-server,sql-server-2008,stored-procedures,Sql,Sql Server,Sql Server 2008,Stored Procedures,我试图为主表中的子表的一条记录编写一个存储过程 我有两张桌子 主“财产” 子“属性图像” 我需要属性的所有详细信息只有一张图像 在子表中,一个属性可能有多个图像 Property (propertyId, title) propertyImage (imageId, FK_propertyId, imageFile) 例如 我的要求是: MyProperty(propertyId, title, imageFile) Myproperty(1, smallbuilding, 1.jpg)

我试图为主表中的子表的一条记录编写一个存储过程

我有两张桌子

  • 主“财产”
  • 子“属性图像”
我需要
属性的所有详细信息
只有一张图像

在子表中,一个属性可能有多个图像

Property (propertyId, title)

propertyImage (imageId, FK_propertyId, imageFile)
例如

我的要求是:

MyProperty(propertyId, title, imageFile)
Myproperty(1, smallbuilding, 1.jpg)
Myproperty(2, bigbuilding, 2.jpg)

你的问题不是很清楚。我认为您需要的是
将两个表(property,propertyImage)合并到一个表(myProperty)
。这听起来像是一次性的工作,那么为什么需要存储过程呢?下面的查询可以完成这项工作。如果需要存储过程语法,请提供存储过程语法。还请注意,新的MyProperty表应该有一个主键列

INSERT INTO MyProperty (propertyId,title,imageFile)
SELECT propertyId, title, imageFile FROM (
    SELECT p.propertyId,p.title,i.imageFile, 
           RANK() OVER (ORDER BY i.FK_propertyId, i.ImageId) RN
    FROM Property p JOIN propertyImage i 
     ON p.propertyId = i.FK_propertyId
) A
WHERE RN = 1

根据您希望如何选择一个
属性图像
,您可以为每个属性选择一个CTE并加入该CTE:

WITH FirstImagePerProperty
AS
(
    SELECT FK_propertyId,
           MIN(imageId) As FirstImageId
    FROM PropertyImage
    GROUP BY FK_propertyId
)
SELECT
   p.propertyId,
   p.title,
   i.imageId, 
   i.imageFile
FROM Property p
INNER JOIN FirstImagePerProperty fipp ON p.propertyId=fipp.FK_propertyId
INNER JOIN PropertyImage i ON fipp.FK_propertyId=i.FK_propertyId

听起来你需要这个

;WITH cte AS
 (
  SELECT ROW_NUMBER() OVER (PARTITION BY propertyId ORDER BY imageId) AS rn,
         propertyId, title, imageFile
  FROM Property p JOIN propertyImage pr ON p.propertyId = pr.FK_propertyId
  )
  SELECT propertyId, title, imageFile
  FROM cte
  WHERE rn = 1

您希望如何选择一个
属性图像
——第一个由
图像ID
选择?或者其他什么?您的预期结果也没有意义-属性
2
与图像
2.jpg
-第一个关联的是
7.jpg
@PavanVParekh更新为
RANK()
以获得基于
i.FK\u propertyId,i.ImageId
前1
,谢谢@Alexander Fedorenko
;WITH cte AS
 (
  SELECT ROW_NUMBER() OVER (PARTITION BY propertyId ORDER BY imageId) AS rn,
         propertyId, title, imageFile
  FROM Property p JOIN propertyImage pr ON p.propertyId = pr.FK_propertyId
  )
  SELECT propertyId, title, imageFile
  FROM cte
  WHERE rn = 1